[Hibernate] Слияние временного объекта с детьми - PullRequest
3 голосов
/ 26 ноября 2010

У меня проблемы со слиянием.Мой метод обновления работает следующим образом:

void update(Parent parent) {
    evict(parent);
    merge(parent);
}

Мои классы:

Parent {

  Long id;

  List<Children> childrens;

  @OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY)
  @JoinColumn(name="PARENT")
  @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
  List<Children> getChildrens(){...}

  @Id
  Long getId() {...}

}



Children{

  Parent parent;

  @ManyToOne(targetEntity = ParentImpl.class, fetch = FetchType.LAZY)
  @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
  @JoinColumn(name = "PARENT", nullable = false)
  Parent getParent(){...}

}

Когда я создаю новый родительский (временный) объект и добавляю новых детей и пытаюсь обновить (выселить и объединить) затем логи показывают мне это после сеанса спящего сброса:

INSERT PARENT //everythings here is ok.

INSERT CHILDREN // but without parent id(id=null)

Порядок хорош, но у детей нет родительского идентификатора во вставке.Все отлично работает, когда Parent сохраняется в базе данных, тогда у детей всегда есть хороший идентификатор.

Любые идеи, что я должен сделать, чтобы получить идентификатор от временного объекта (из постоянных в порядке).

С уважением KZ.

1 Ответ

2 голосов
/ 26 ноября 2010

Вы не можете получить идентификатор от временного объекта, по определению временный объект не имеет идентификатора.

Почему вы делаете слияние, если создаете новый объект?Когда вы создаете новый объект, вы должны сохранить его.Если вы измените значения существующего объекта, вы должны обновить его.Объединение следует выполнять только в том случае, если постоянный объект становится отсоединенным, и вам необходимо снова его присоединить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...