Проблема Flush () после слияния сущности - PullRequest
1 голос
/ 26 июня 2010

Моя проблема в том, что у меня есть объект A, который содержит список объектов B

@Entity
class A {

   @OneToMany(cascade={CascadeType.MERGE})
   List<B> list;

}

Когда я выполняю «слияние» объекта A, а затем вызываю «flush» внутри EJB-метода без сохранения состояния

em.merge(a); //a is of class A
em.flush(); //doesn't flush "list"

это на самом деле не работает. Идентификаторы объектов B "списка" не установлены.

Но постоянные и промывочные работы

em.persist(a);
em.flush(); // it works!

Идентификаторы объекта B "списка" установлены.

Я использую EclipseLink. Кто-нибудь знает, что может происходить?

1 Ответ

0 голосов
/ 26 июня 2010

на самом деле это не работает, потому что идентификаторы объектов B, являющихся частью списка "list", не установлены.

Вам следует избегать использования идентификатора для реализации equals/hashCode, контракт не должен изменяться, пока объекты находятся в List.В любом случае, я не могу воспроизвести вашу проблему с EclipseLink 2.0: слияние на A каскадно добавляет вставку на B, когда я добавляю B в список.

...