2012-12-28 11 views
8

私はプロジェクトでHibernateを使用していますが、org.hibernate.annotations.CascadeTypeとjavax.persistence.CascadeTypeアノテーションをいつ使用するのかはまったく分かりません。HibernateとJPAのカスケード型はどちらの場合に使用するか

例えば

私はこのようなものを使用する必要があります。このような何か対

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL) 

を:

@OneToMany(fetch = FetchType.LAZY) 
@Cascade(org.hibernate.annotations.CascadeType.ALL) 

私はまた、Hibernateは1つであり、特定のカスケードタイプを無視することを読みましたxxxx注釈。誰かが私をまっすぐにすることができます

+0

申し訳ありません。あまりにも多くのタブが開いている間に私の脳がぎこちなくなった:) –

答えて

4

一般的に、Hibernateを使用している場合、これらの種類のオーバーラップの多くの例があります。これにはいくつかの異なる理由があります。これは、JPAで標準化される前にHibernateがアノテーションを作成した理由、またはHibernateがJPA標準よりも多くの機能をサポートしているか、それともそれらのセマンティクスがわずかに異なるためです。

Hibernate documentation@OneToMany(cascade=...)が標準の場合、なぜ@Cascadeが存在するのか非常に明確です。 Hibernateアノテーション(@Cascade)は、標準のJPAよりも多くのオプションを提供します。また、わずかに異なるセマンティクスもあります。

特殊なHibernate機能/セマンティクスを必要としない限り、標準のJPAアノテーションを常に使用することをお勧めします。

+0

HibernateアノテーションがJPAアノテーションとまったく同じことをするように見えるので、最初にそれらを使い、必要ならばHibernateアノテーションを補うように見える。ここで説明されている非互換性についてはどうしますか:http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/ –

関連する問題