9

プロジェクトで Hibernate を使用していますが、いつ org.hibernate.annotations.CascadeType を使用するか、いつ javax.persistence.CascadeType 注釈を使用するかについて完全に混乱しています。

たとえば、次のようなものを使用する必要がある場合:

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

対このようなもの:

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

また、休止状態が 1 から xxxx への注釈にある特定のカスケード型を無視することも読みました。誰かが私を正すことができますか?

4

1 に答える 1

4

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

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

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

于 2012-12-28T07:38:42.747 に答える