2016-02-24 46 views
0

现在,由于复制粘贴,我创建了两个具有相同表名的JPA实体。即:通过单元/集成测试检测重复表名

@Table(name = "myfirsttable") 
public class MyFirstTable { @Id @Column private Long id; } 

@Table(name = "myfirsttable") 
public class MySecondTable { @Id @Column private Integer id; } 

我正在使用Spring Test,这意味着幸运的是,至少有一个测试失败时,我这样做。麻烦的是我看到的失败会抱怨数据类型。例如,在上面,我会看到从HibernateJpaAutoConfiguration.class引发的异常,例如的expected int but found bigint。如果我看一下应该是myfirsttable的课程,我会感到困惑(我很容易混淆),想“但它说这是一个Long,所以bigint肯定是正确的映射?”我可能需要一段时间才能弄清楚为什么我会看到这条信息。同样,堆栈跟踪可能会提到无法找到一个字段。

到目前为止,只有几次我觉得有必要创建两个指向同一个表的不同实体,以便覆盖99%的情况下两个实体指向同一个表的方法是一个错误,我想知道是否有一个简单的方法来设置一个测试,这会失败,告诉我,我已经创建了一个重复的表名称。我正在考虑一个可以放入我所有项目的测试,这可以给我一个有用的警告来确定这个问题。

回答

1

有2个选项,我可以看到:

你可以创建一个测试,这将只是尝试并加载您的ApplicationContext。如果失败了,那就错了。不幸的是,为了找出究竟是什么错误,你必须挖掘日志。

另一种选择是编写一个测试,该测试将查看所有带有@Table注解的类,并查看是否有多个表具有相同的表名。我在我的一个项目中使用类似的测试来确保没有实体类使用基元。有libriares,使它更容易扫描具有某些注释的类。

+0

加载'ApplicationContext'是我看到当前错误的地方。问题更多的是关于检测可能的重复'@ Table'注释的错误。我可以看看手动扫描“@ Table”注释类。我不会认为这太棘手...... – Steve