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

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

最简单的方法是什么?

有帮助吗?

解决方案

只要创建尽可能简单的SessionFactory或任何的EclipseLink或OpenJPA中提供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();

如果你不信任JPA提供商(或不想使用它们),那么试着调和JPA注释(元数据)使用反射使用取得的JDBC的元数据检索的的ResultSetMetaData 的(例如见这里)。

我并不是说这是简单的,但正确的方法,你应该有相当紧凑的一套辅助方法来检查基本定义为每个实体。和里程可能取决于你想要多少JPA功能覆盖变化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top