У меня есть отношения OnetoMany между Person и Role class. Человек может иметь несколько ролей. Когда я создаю нового человека, роли (существующие записи) должны обновляться с идентификаторами person. Я использую сопоставление @OneToMany с CascadeType All, но класс Role не обновляется с идентификатором Person. Если новая роль создается и устанавливается как отношение при создании Person, она отлично работает. Но когда вы создаете нового человека и пытаетесь установить его на существующую роль, он не обновляется.OneToMany Update не работает в дочернем классе
ответ
Это должно быть сделано вручную для двунаправленных ссылок. Спящий режим учебник дает хороший пример: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#tutorial-associations-usingbidir
В вашем случае: С OneToMany стороны, сделать ваш метод setPersons (...) защищен, и определить общественную addPerson (Person р) метод, как это:
public void addPerson(Person p) {
this.getPersons().add(p);
p.setRole(this);
}
Кстати, если у человека может быть несколько ролей, а роль может быть назначена нескольким лицам, то, скорее всего, то, что вы на самом деле хотите, - это отношения ManyToMany. Таким образом, вы должны были бы:
public void addPerson(Person p) {
this.getPersons().add(p);
p.getRoles().add(this);
}
И в классе Person:
public void addRole(Role r) {
this.getRoles().add(r);
r.getPersons().add(this);
}
Это необходимо, потому что в отличие от EJB 2.x Container Managed отношений (CMR), это не обрабатывается автоматически , Hibernate использует метод POJO. Недостатком CMR является то, что для создания объектов требуется контейнер, тогда как вы можете создавать объекты POJO повсюду. И если вы их создадите, они просто обычные объекты Java, а не трюки.
Вот хороший блог статью, в которой обсуждается это далее: http://blog.xebia.com/2009/03/16/jpa-implementation-patterns-bidirectional-assocations/
Кому кто ниспровергнут: Это из официальной документации. У вас есть лучшее решение? (Примечание: Hibernate не выполняет * черную магию * на ваших объектах, что необходимо для автоматизации двунаправленных ссылок.) –
Некоторые примеры кода может оказаться полезным. – axtavt
Это похоже на [эта проблема] (http://stackoverflow.com/questions/2441598/detached-entity-passed-to-persist-error-with-jpa-ejb-code/4905238#4905238). – zawhtut