【发布时间】:2014-04-24 16:30:49
【问题描述】:
我的一个 dbUnit 测试有问题,我无法解决。有一个数据结构具有由 jpa 注释定义的父子关系:
/**
* Parent account
*/
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "parentAccountId", insertable = false, updatable = false)
private Account parentAccount;
/**
* Subordinated accounts
*/
@OneToMany(mappedBy="parentAccount")
@JsonIgnore
private Set<Account> childAccounts = new HashSet<Account>();
我有一个抽象类,它在执行junit测试之前将数据集加载到数据库中,该类具有以下注释:
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class })
@DatabaseSetup("classpath:db-test-script.xml")
@DatabaseTearDown(type=DatabaseOperation.DELETE_ALL, value = { "classpath:db-test- script.xml" })
效果很好,但不适用于我之前提到的课程。数据集中的数据结构如下所示:
<referralAccount id="2" code="CODE2" />
<referralAccount id="1" code="CODE" parentAccountId="2"/>
但我在日志中发现的问题如下:
FlatXmlProducer:316 - 表 Account 的第 2 行上的额外列 (parentAccountId)(全局行号为 5)。这些列将被忽略。 请将额外的列添加到第 1 行,或使用 DTD 确保填充这些列的值或为您的 FlatXmlProducer 指定“columnSensing=true”。 有关详细信息,请参阅常见问题解答。
问题是,有没有办法通过注释来指定 dtd 或 columnSensing?如果可以避免,我不想实现 setUp 方法,因为注释似乎是处理此问题的一种简单的方法。
谢谢!
【问题讨论】:
-
DTD 应该在 XML 文件中指定,而不是在注释中。或者您可以简单地为第一行指定
parentAccountId="null",如错误消息所述。或者你可以使用DbSetup -
您的意思是像 那样添加对它的引用,还是将其嵌入到 xml 本身中? (不确定这是否可能)
标签: java spring hibernate junit dbunit