Я имею класс Entity:
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, length = 100)
@Pattern(regexp = "(.+)@(.+).(.+)", message = "Email address must contain @ and .")
private String email;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private Set<Knowledge> knowledge = new HashSet<>();
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private Set<Task> tasks = new HashSet<>();
@Transient
@NotBlank(message = "Name must be required")
private String name;
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Set<Knowledge> getKnowledge() {
return knowledge;
}
public void setKnowledge(Set<Knowledge> knowledge) {
this.knowledge = knowledge;
}
public Set<Task> getTasks() {
return tasks;
}
public void setTasks(Set<Task> tasks) {
this.tasks = tasks;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addKnowledge(Knowledge knowledge) {
this.knowledge.add(knowledge);
knowledge.setUser(this);
}
public void removeKnowledge(Knowledge knowledge) {
this.knowledge.remove(knowledge);
knowledge.setUser(null);
}
public void addTask(Task task) {
tasks.add(task);
task.setUser(this);
}
public void removeTask(Task task) {
tasks.remove(task);
task.setUser(null);
}
}
Так же имею репозиторий:
@Repository
public interface KnowledgeRepository extends CrudRepository<Knowledge, Integer> {
}
Предположим в нужном месте я достал entity по id, далее во время работы в некоторых местах мне нужны entity task(которые связаны с User), как я могу их достать в некоторых местах программы?
Если ваше поле помечено FetchType.LAZY
, значит содержимое его вы можете получить только внутри одной транзакции для этого пометьте метод сервиса аннотацией @Transactional
или сам класс, тогда каждый метод будет будет как отдельная транзакция. без этого при обращение к этому полю вы получите LazyInitializationException.
или можно обратиться отдельно к репозиторию тасков и найти их по id юзера
А если определить в репозитории отдельный метод для получения юзера с тасками и когда нужны таски выдергивать юзера этим методом, к примеру как-то так:
@EntityGraph(attributePaths = "tasks")
@Query("SELECT u FROM User u WHERE u.id=?1")
User getWithTasks(int id);
P.S. Для валидации email есть аннотация @Email javax.validation.constraints.Email
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю метод PUT, делаю контроллер и пытаюсь откорректировать данные которые находятся в базе но на запрос PUT я получаю Bad Request, Required request body is missingПомогите...
По сути у меня есть метод, который считывает слова из файла и записывает в массивПример текстового файла: