2

注釈付きなどの多くのクラスで作業していますjavax.persistence.Entity。私のプロジェクトは、永続性自体ではなく、JPA注釈付きクラスに関するメタデータを生成することを目的としているため、それらをテストケースとして使用しています。

Hibernateやその他のJPAプロバイダーを起動するのではなく、プログラムで(単体テストの一部として)、JPA宣言が実際に有効であることを確認したいと思います。

それを行う最も簡単な方法は何ですか?

4

4 に答える 4

4

可能な限り単純なSessionFactoryものを作成するか、EclipseLink または OpenJPA が背後で提供するものを作成し、EntityManagerFactoryそれらを検証させます (必要に応じてダミーのメモリ内データベースを使用します)。再発明するには複雑すぎます。

Hibernate の場合、これは以下を使用して実行できます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();
    }
}
于 2010-02-14T21:34:07.317 に答える
1

テストで具体的な JPA プロバイダーを使用することの何が問題になっていますか? 組み込みデータベース (Apache Derby など) と組み合わせると、すでに実装されているロジックを再利用できます。別のアイデアは、EclipseLink、Hibernate、OpenJPA などのソースをチェックして、直接使用できるかどうかを確認することです。

于 2010-02-14T21:35:46.277 に答える
0

もっと簡単な方法があるかどうかはわかりませんが、リフレクションを使用してクラスの注釈にアクセスできます

Class class = Example.class;
Annotation[] annotations = class.getAnnotations();
于 2010-02-14T21:32:50.137 に答える
0

JPA プロバイダーを信頼しない (または使用したくない) 場合は、リフレクションを使用して取得した JPA アノテーション (メタデータ) と、ResultSetMetaDataを使用して取得した JDBC メタデータを調整してみてください (たとえば、こちらを参照してください)。

これを単純にするつもりはありませんが、適切なアプローチでは、各エンティティの基本的な定義を確認するためのヘルパー メソッドのかなりコンパクトなセットが必要です。また、どの程度の JPA 機能をカバーしたいかによって、マイレージは異なる場合があります。

于 2010-02-14T21:46:45.247 に答える