2016-06-12 4 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] 

Когда я назначаю ребенка матери непосредственно, его работа.

User user = new User("kain", "[email protected]"); 
User ewa = session.find(User.class, 1L); 
user.setMother(ewa); 
session.persist(user); //ok 

ответ

1

Устанавливая

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, 
mappedBy = "mother") public Set<User> getChildren() { 
return children; } 

Вы объявили mappedBy=mother, что означает, что User является владеющим субъектом отношения и отношение устанавливается на mother поля. В JPA/Hibernate собственная сторона используется для сохранения и сохранения отношений между сущностями.

Пожалуйста, обратите внимание на следующее: https://stackoverflow.com/a/21068644/2392469

+0

Без mappedBy Hibernate будет создавать отдельную таблицу для сохранения связанных пользователей id.With mappedBy Hibernte не будут отслеживать изменения, сделанные детьми матери набор. Таким образом, нет способа заставить его работать должным образом, нет способа сказать Hibernate «использовать MOTHER_ID Подано для отслеживания изменений вместо отдельной таблицы»? – Damian

Смежные вопросы