2016-05-13 7 views
0

JPA @Entity annotationの提供者には疑問があります。JPA impementorはjavax.persistence.Entityアノテーションを実装していますか?

私は、JPAが(休止状態のような)ORMツールの標準仕様であり、これらのツールがJPA仕様を実装していることを理解します。

import javax.persistence.Entity; 

私はそれが「標準」(JPA)仕様であるため、どのJDKによって提供さいくつかのjarファイルがあるだろうという印象の下にあった:私の単純なプロジェクト私はimport文を持っているで今

このAnnotationの定義を含みます。 JDKでさまざまなjarファイルを検索しましたが、Entity.classという.jarファイルはありません。だから、

、それはこれらの標準仕様が一部ではないことを一般的に意味がある -

代わりに休止状態でこのEntity annotation(> hibearnate-JPA-XX.jar瓶)の定義を持っているjarファイルがありますJDKの、仕様の実装者によって提供されていますか?

+1

javax.persistence.Entityは、persistence-api.jarで提供されるANNOTATIONです。誰も "実装しません"。 JPAはJDKにありません –

+0

あなたの返信ありがとうございます。私は誰がエンティティ注釈のコードを「書く」ことを意味します。つまり、これらの仕様を実装するプロバイダは、これらすべてのコードを提供していますか?私にはそうだ。私は、仕様のインターフェースがJDK(輸入の由来)から提供され、実際の実装は仕様を実装しているプロバイダから来ていると私は考えています。私はこれらの疑念を明確にしたい、少し拡大することができれば助けになるだろう。 – CuriousMind

+1

JPA専門家グループは、仕様、API jar、TCKの提供を担当していました。 JPA 2.0とJPA 2.1の場合は、(怠惰のために)API jarを提供せず、JPAの実装と一緒にAPI jarを提供するためにJPAの実装に残しました。(そこには多くのJPA API jarがあります。 1つはHibernate用、もう1つはEclipseLink用、もう1つはDataNucleus用...すべて名目上同じです)。 –

答えて

2

JPA仕様はJCPによって作成されたものであり、 "専門家グループ"です。専門家グループは、仕様(ドキュメント)、API jar(仕様に定義されたインタフェース、注釈)、実装が仕様を正しく実装しているかどうかを確認するためのTCK(テスト互換性キット)を提供しました。 JPAの場合、「TCK」は秘密であるため、一般の人々はJPAプロバイダのコンプライアンスをテストできません(なぜこれを行ったのかを見てください)。

API jarには、@Entityアノテーションと、仕様に定義されているすべてのものが含まれています。

JPA 1.0の場合、専門家グループはAPI jar seen hereを提供しました。 JPA 2.0およびJPA 2.1の場合、専門家グループは怠惰のためにAPI jarを提供しませんでした。したがってDataNucleus,HibernateEclipseLinkなどのJPAプロバイダは、JPA実装と併せて独自のAPI jarを提供する必要がありました。したがって、@Entity注釈はJPAプロバイダAPI jarにあります。たとえば、DataNucleus JPA API jarにあります。

+0

あなたのコメントに加えて、詳細な答えを提供してくれてありがとう。私はあなたの答えにポイントを倍増させてください。ありがとう、トン! – CuriousMind

関連する問題