以编程方式检查类是否具有有效JPA定义的最简单方法

时间:2010-02-14 21:17:12

标签: java hibernate jpa eclipselink openjpa

我正在处理许多使用javax.persistence.Entity等注释的类。我的项目是关于生成有关JPA注释类的元数据而不是自身的持久性,所以我将它们用作测试用例。

我不想启动Hibernate或其他一些JPA提供程序,而是想以编程方式检查 - 我的单元测试的一部分 - 我的JPA声明确实有效。

最简单的方法是什么?

4 个答案:

答案 0 :(得分:4)

只需创建最简单的SessionFactoryEntityManagerFactory后面提供的EclipseLink或OpenJPA,并让它们验证它(如果需要,使用一些虚拟的内存数据库)。重新发明它太复杂了。

对于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();
    }
}

答案 1 :(得分:1)

在测试中使用具体的JPA提供程序有什么不对?结合嵌入式数据库(例如Apache Derby),您可以重用已经实现的逻辑。另一个想法是检查EclipseLink,Hibernate,OpenJPA等的来源,看看你是否可以直接使用它。

答案 2 :(得分:0)

我不确定是否有更简单的方法,但您可以使用Reflection来访问类的注释

Class class = Example.class;
Annotation[] annotations = class.getAnnotations();

答案 3 :(得分:0)

如果您不信任JPA提供程序(或者不想使用它们),那么尝试将使用反射检索的JPA注释(元数据)与使用 ResultSetMetaData 检索的JDBC元数据进行协调(例如,请参阅here)。

我并不是说这很简单,但是如果使用正确的方法,你应该有一套相当紧凑的辅助方法来检查每个实体的基本定义。里程数可能会有所不同,具体取决于您想要涵盖多少JPA功能。