2009-06-05 14 views
33

@Entityでクラスに注釈を付け、依存関係を解決しようとすると、2つの異なるパッケージjavax.persistence.Entityとorg.hibernate.annotations.EntityJPAエンティティとHibernateエンティティの違い

の間でパッケージを選択することになります

javaxパッケージはJPAのエンティティアノテーションですが、なぜハイバネートエンティティアノテーションが存在し、JPAのアノテーションとの違いがありますか?より多くの属性を定義できるようにする拡張機能ですか?

答えて

34

org.hibernate.annotations.Entityには、javax.persistence.Entityが標準化されていないいくつかの余分な属性があります。特別な機能は、hibernateのAnnotationConfigurationを直接使用する場合、またはhibernateがJPAプロバイダである場合にのみ機能します。 the FAQから

編集:新しいリンク the specific question 編集:新しいリンクthe answer:私はorg.hibernate.annotations.Entity @使用し、未知の取得

エンティティ例外

常に@ org.hibernate.annotations.Entity @ javax.persistence.Entity

がjavax.persistence.Entity @完了しますが、例えば、交換

はありませんが、属性が存在しているのかどうか休止状態指示した、と呼ばれるoptimisticLockバージョンの列を使用するか、または更新時にすべての列を比較してください。この動作はJPA仕様にはないため、設定するために、独自の注釈にあるhibernate固有の拡張機能を使用する必要があります。このよう

:あなたは私たちは、コードを変更する必要があるJDBCテンプレートまたはのiBATISを使用するとした場合、プロジェクトで使用org.hibernate.annotations @

@Entity 
@org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL) 
public class MyEntity implements Serializable { 
... 
} 
-1

違いについてはわかりませんが、クラスパスにHibernate jarがある場合は、Hibernate JPAを使用しています。 HibernateはJPAの実装を提供します。 javax.persistenceパッケージを使用していても、Hibernate JPAを使用しています。

違いがあるのは名前の付け方だけです。彼らは、Hibernateパッケージ空間とjavaxパッケージ空間の両方で同じクラスを提供するかもしれません。

1

。 javax.persistenceを使用する場合、コードを変更する必要はありません。これは、org.hibernate.annotationsとjavax persistenceの主な違いです。