我正在处理许多使用javax.persistence.Entity
等注释的类。我的项目是关于生成有关JPA注释类的元数据而不是自身的持久性,所以我将它们用作测试用例。
我不想启动Hibernate或其他一些JPA提供程序,而是想以编程方式检查 - 我的单元测试的一部分 - 我的JPA声明确实有效。
最简单的方法是什么?
答案 0 :(得分:4)
只需创建最简单的SessionFactory
或EntityManagerFactory
后面提供的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功能。