0
간단한 부모 - 자식 관계를 매핑하려고했습니다.Hibernate - @OneToMany 엔티티들의 영속 콜렉션
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "mother")
public Set<User> getChildren() {
return children;
}
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "MOTHER_ID")
public User getMother() {
return this.mother;
}
테스트 케이스 :
@Test
public void t4adopt() {
User ewa = session.find(User.class, 1L);
User user = new User("abel", "[email protected]");
session.persist(user);
ewa.getChildren().add(user);
System.out.println("save eva's children");
session.saveOrUpdate(ewa);
//session.save(user);
session.flush();
System.out.println("4. " + ewa);
session.refresh(user);
System.out.println("5. " + user);
}
@Before
public void start() {
session.getTransaction().begin();
}
@After
public void close() {
session.getTransaction().commit();
session.close();
}
Hibernate는 자식 엔티티에 어머니의 ID를 할당하지 않았다.
5. User [idUser=3, mother=null, [email protected], name=null, surname=null, userGroups=[], userLogin=abel]
나는 어머니에게 아이를 직접 할당하면 그 일을합니다.
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,
mappedBy = "mother") public Set<User> getChildren() {
return children; }
을 설정하여
User user = new User("kain", "[email protected]");
User ewa = session.find(User.class, 1L);
user.setMother(ewa);
session.persist(user); //ok
는 id.With mappedBy Hibernte가 설정 한 어머니의 자녀에 대한 변경 사항을 추적하지 않습니다 관련된 사용자를 저장하는 별도의 테이블을 생성합니다. 그래서 예상대로 작동하게하는 방법이 없다면, Hibernate에게 "MOTHER_ID를 사용하여 파일을 사용하여 별도의 테이블 대신 변경 사항을 추적"할 수있는 방법이 없다. – Damian