以编程方式检查类是否具有有效 JPA 定义的最简单方法
-
20-09-2019 - |
题
我正在处理许多带有注释的课程 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功能覆盖变化。
不隶属于 StackOverflow