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