5

プロジェクトで Hibernate を使用し、Hibernate Domain Pojo オブジェクトのアノテーション ベースの構成を使用しています。注釈ベースの構成には、2 つのオプションがあります

  1. を使用した JPA ベースのアノテーションjavax.persistence.*
  2. Hibernate のネイティブ アノテーションを使用するorg.hibernate.annotations.*

現在、POJO ファイルに JPA ベースのアノテーション構成を使用し、SessionFactory、Session などの Hibernate ネイティブ API を使用してセッションを開き、DB 操作を実行しています。

これらの質問があります:

  1. JPA アノテーションと Hibernate ネイティブ API の使用の両方を混在させることに問題はありますか?
  2. このリンクは、そのような問題の 1 つを説明しています (cascade-jpa-hibernate-annotation-common-mistake)
  3. どのタイプの注釈を使用するか、専門知識を提供してください
    1. JPA
    2. 休止状態のネイティブ
    3. 両方混ぜる?
4

2 に答える 2

6

Hibernate は JPA 実装の 1 つを提供します。コードで純粋に JPA を使用している場合、要件が発生した場合に別の実装に自由に変更できます。たとえば、EclipseLink/TopLinkおよびOpenJPAは、別の顧客に必要となる可能性のある実装です。実装の包括的なリストはこちらです。

JPA 仕様にない hibernate によって提供されるエキゾチックな機能を使用せざるを得ない場合は、コードベースで hibernate 固有の API を使用する必要があります。ここの休止状態フォーラムからの関連する議論。

于 2013-04-17T05:53:10.317 に答える
2

当時作業していた hibernate のバージョンでは、一部の機能が当時の JPA 仕様で利用できなかったため、これらのアノテーションの一部を混合しました。たとえば、ブール値を 'Y' または 'N' として DB に格納するには、使用できる休止状態の型があります。しかし、当時の JPA 仕様ではそのような機能は利用できませんでした。現在の状況についてはわかりません。また、孤立した削除についても、当時は JPA に機能がありませんでしたが、カスケード オプションで orphanRemoval という属性が提供されていると思います。また、 @BatchSize などの特定の機能を使用して、バッグに関するフェッチのパフォーマンスを向上させます。そのような機能が JPA 仕様でまだ利用可能かどうかはわかりません。

私の経験では、あるORMから別のORMに切り替える必要がないことを考えると、両方のプラスポイントを組み合わせて一致させることは有益です.

于 2013-04-17T08:10:15.537 に答える