我在集成测试期间使用DBUnit来模拟我继承的传统Spring / Hibernate项目的数据。不幸的是很久以前有人认为拥有一个名为user的用户表会很好,这是我们数据库中的保留关键字。 然后通过将实体表映射重命名为“user”来解决这个问题,该用户现在已经存在了很长时间。
正如我现在几年后开始整合集成测试一样,这会产生一个问题,因为DBUnit不允许在其xml数据集文件中使用`字符(它是你知道的XML ...),而CSV读取器则需要文件被称为`user`.csv,在我的操作系统下似乎失败了。
有没有办法在不使用DBUnit的XML或CSV阅读器的情况下添加此表,还是应该从另一个角度解决这个问题?一种替代方法是在集成测试期间使用另一个映射,以便我可以将表命名为它的预期名称(用户)。但我不知道这是否可行。
我已经打了2天了,所以我喜欢一些外部反馈。
所以,只是澄清一下。我有一个实体,如:
@Entity (name = "`user`")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Auditable
public class User implements UserDetails, Serializable {
properties etc....
在我的集成测试期间,hibernate通过配置persistence.xml文件来负责创建其他表。 当dbunit尝试填充数据时,由于缺少表而导致错误,无论我如何尝试转义用户表名。
答案 0 :(得分:2)
我怀疑你需要escape pattern configuration。
类似于
的东西dbunitConn.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, "\"?\"");
其中dbUnitConn是你的dbUnit连接,应该这样做。