Каскадирование в JPA + Hibernate - PullRequest
0 голосов
/ 12 января 2012

Ниже приведены мои сущности:



public class EntityA {

   //...
   @OneToMany(mappedBy="entityA")
   private Set entitieBs;

}

public class EntityB {

   //...
   @ManyToOne(cascade=CascadeType.PERSIST)
   private EntityA entityA;

}

with accessors methods(getters and setters).

Я намерен каждый раз, когда я сохраняю новый объект EntityB в базе данных (с набором объектов EntityA в качестве «родителя»), если я вызову EntityA.getEntityBs () для родителя нового EntityB , чтобы добавить его в результат Set .Но если я сделаю это, как в моем примере, это не сработает.

Кто-нибудь знает, где я неправ?

Спасибо!


Вот мой код Java, как я сохраняю сущность:


//...some code
EntityB eb = new EntityB();
eb.setEntityA(entityA);
entityManager.persist(entityB);

Я хочу пояснить, что я не добавляю entityB к entityA совокупности entityBs.

1 Ответ

4 голосов
/ 12 января 2012

Этот вопрос задается каждые два дня.

JPA не поддерживает согласованность графа объектов для вас. Это ваша обязанность поддерживать обе стороны двунаправленной ассоциации. Все будет так, как вы ожидаете, если вы совершите транзакцию, закроете сеанс и перезагрузите сущности, потому что вы инициализировали сторону-владельца ассоциации. Но если вы измените одну сторону ассоциации в памяти, JPA не изменит другую сторону для вас.

...