web-dev-qa-db-ja.com

Hibernate @ ManyToOneはCascadeType.ALLでのみ機能します

私はHibernate3.3.1を使用していますが、個人と割り当てられた会社との関係を作成したいと思います。それらは疎結合である必要がありますが、saveOrUpdate(newCompany)を明示的に呼び出さずに、カスケードを介して会社を作成するように手配したいと思います。

次のエンティティを定義しました。

class Company
{
   @Id
   Long companyId;
   String name;
}

class Person
{
   @Id
   Long personId;
   String name;
   @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
   Company company;
}

私のダオの中で私は次のことをしています:

testpers.setCompany (newCompany);
session.saveOrUpdate(testpers);

そして私は例外を取得します

org.hibernate.TransientObjectException:オブジェクトは保存されていない一時インスタンスを参照します-フラッシュする前に一時インスタンスを保存します:consearch.model.core.Company

「cascade = CascadeType.ALL」で注釈を付けると機能しますが、削除もカスケードしたくありません(たとえば、会社が削除された場合、その人は削除されるべきではありません)

私を助けてくれてありがとう前に誰もこの問題を抱えていなかったのだろうかと思っていました。シェーン

9
Shannon

非JPASession.saveOrUpdate()メソッドを使用する場合は、おそらくHibernateカスタム _@Cascade_ を有効にする必要があります。
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)を追加するか、Session.persist()を使用します

10