【发布时间】:2012-02-06 12:06:15
【问题描述】:
我将数据从 MS SQLServer 导出到一个 xml 文件,然后在运行需要数据库的单元测试中使用该数据集。我使用 dbunit maven 插件。
不幸的是,并非某些表中的所有列都映射到我的实体类中。
例如,假设我们有一个名为“member”的表。 成员表有三列:memberid、membername、memberrank。 当我进行导出时,我会导出所有三列。 但是在我的 MemberEntity 类中,我只映射 memberid 和 membername,因为我的应用程序中不需要 memberrank。所以我会让 MemberEntity 看起来像这样:
@Entity
@Table(name = "member")
public class MemberEntity {
@Id
@GeneratedValue()
@Column(name = "memberid", nullable = false)
private Integer memberid;
@Column(name = "membername", nullable = false)
private String membername;
...
}
然后,我尝试在测试用例之前将数据集插入 HSQLDB:
IDatabaseConnection conn = new DatabaseConnection(((SessionImpl) (entityManager.getDelegate())).connection());
IDataSet dataset = new XmlDataSet(
resourceLoader.getResource("classpath:dataset.xml").getInputStream());
conn.getConfig().setProperty("http://www.dbunit.org/properties/datatypeFactory", new MsSqlDataTypeFactory());
DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);
此时,我收到一个异常,指出列 MemberRank 不存在。它是这样说的:
org.dbunit.dataset.NoSuchColumnException: MEMBER.MEMBERRANK - (Non-uppercase input column: memberrank) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
当我从数据集中删除列时,一切都很好。如果我将 memberRank 映射添加到我的 Entity 类,再次,一切顺利。 但我无法将列映射添加到我的实体类中。是否有一种简单的方法(除了手动从导出的数据集中删除列和相关数据)在我执行 INSERT 时排除(尝试)添加该列?
【问题讨论】:
-
您的问题解决了吗?我看不到任何 cmets 或接受的答案。
标签: java hibernate unit-testing hsqldb dbunit