プログラムでクラスが有効なJPAの定義を持っていることを確認する最も簡単な方法

StackOverflow https://stackoverflow.com/questions/2262819

質問

私はjavax.persistence.Entityなどでアノテートされている多くのクラスで働いています。私のプロジェクトは、それ自体でJPA注釈付きクラスではなく、持続性に関するメタデータを生成する程度であるので、私はテストケースとしてそれらを使用しています。

私のユニットテストの一部を - -

むしろ休止状態または他のいくつかのJPAプロバイダを発射よりも、私はプログラム的にチェックしたいのですが、私のJPA宣言が実際に有効であること

それを行うのが最も簡単な方法は何でしょうか。

役に立ちましたか?

解決

ただ、EclipseLinkのか、OpenJPAのがSessionFactoryの後ろに提供何でも可能な限り単純なEntityManagerFactoryかを作成し、(必要に応じて、いくつかのダミーインメモリデータベースを使用して)彼らはそれを検証してみましょう。それは、それを改革するためにあまりにも複雑です。

休止状態の場合、これはConfiguration.buildMappingsを使用して行うことができます:

@RunWith(Theories.class)
public class EntitiesAreValidTest {

    @DataPoints
    public static Class<?>[] entities = new Class[] {
        SimpleEntity.class,
        SimpleEntityWithTransientField.class,
        TwoFieldEntity.class
    };

    @Theory
    public void classHasValidConfiguration(Class<?> entityClass) {

        new AnnotationConfiguration().addAnnotatedClass(entityClass).buildMappings();
    }
}

他のヒント

をいただきました!間違ったあなたのテストで、具体的なJPAプロバイダを使用してはどうですか?組み込みデータベース(例えばApache Derbyを)との組み合わせで、あなたは確かにすでに実装されたロジックを再利用することができます。もう一つのアイデアは、あなたがそれを直接使用できるかどうかを確認するためにEclipseLinkは、Hibernateは、OpenJPAの、...のソースを確認することになります。

私は、もっと簡単な方法があるかどうかわからないが、あなたは、クラスの注釈にアクセスするためにリフレクションを使用することができます
Class class = Example.class;
Annotation[] annotations = class.getAnnotations();
あなたが使用して取得したJDBCのメタデータをリフレクションを使用して取得JPAプロバイダを信頼していない(またはそれらを使用する必要はありません)その後、(メタデータ)JPAのアノテーションを調整しようとすると、

のResultSetMetaData の(例えば参照ここを)。

私は、これは簡単なことを意味するものではありませんが、正しいアプローチでは、各エンティティのための基本的な定義を確認するためのヘルパーメソッドのではなく、コンパクトなセットを持っている必要があります。そして、走行距離はあなたがカバーしたいどのくらいのJPA機能性に応じて異なる場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top