现在有几次,由于复制粘贴,我创建了两个具有相同表名的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
。如果我看一下应该是myfirsttable
的班级,我会感到困惑(我很容易混淆),思考“但它说它是Long
,所以肯定bigint
是正确的映射?“我可能需要一段时间来弄清楚为什么我会看到那个特定的信息。同样,堆栈跟踪可能会提到无法找到字段。
到目前为止,只有少数情况我觉得有必要创建两个指向同一个表的不同实体,以便覆盖99%的情况,其中两个实体指向同一个表是一个错误,我想知道是否有一种简单的方法来设置测试,这会以一种方式告诉我,我已经创建了一个重复的表名。我正在考虑将一个测试放入我的所有项目中,这可以给我一个有用的警告来识别这个问题。
答案 0 :(得分:1)
我可以看到两个选项:
您可以创建一个只会尝试加载ApplicationContext的测试。如果失败了,那就错了。不幸的是,要找出确切的错误,你必须深入研究日志。
另一种选择是编写一个测试,它将查看所有使用@Table
注释的类,并查看是否有多个具有相同的表名。我在我的一个项目中使用类似的测试来确保没有实体类使用原语。有libriares可以更轻松地扫描具有特定注释的类。