2016-06-12 3 views
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 

답변

1

당신은 User은 관계의 소유 법인과의 관계가 mother 필드에 설정되어 있음을 의미, mappedBy=mother을 선언했다. JPA/Hibernate에서 소유 측면은 엔티티 들간의 관계를 유지하고 유지하는 데 사용됩니다.

는 제발 좀 봐 : mappedBy 최대 절전 모드없이 https://stackoverflow.com/a/21068644/2392469

+0

는 id.With mappedBy Hibernte가 설정 한 어머니의 자녀에 대한 변경 사항을 추적하지 않습니다 관련된 사용자를 저장하는 별도의 테이블을 생성합니다. 그래서 예상대로 작동하게하는 방법이 없다면, Hibernate에게 "MOTHER_ID를 사용하여 파일을 사용하여 별도의 테이블 대신 변경 사항을 추적"할 수있는 방법이 없다. – Damian

관련 문제