java - 如何在使用 dbunit 插入 HSQLDB 期间排除列

标签 java hibernate unit-testing hsqldb dbunit

我将数据从 MS SQLServer 导出到 xml 文件,然后使用该数据集运行需要数据库的单元测试。我使用 dbunit maven 插件。

对我来说不幸的是,并非某些表中的所有列都映射到我的实体类中。

举个例子,我们有一个名为“member”的表。 成员(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 映射添加到我的实体类中,那么一切都会顺利进行。 但我无法将列映射添加到我的实体类中。有没有一种简单的方法(除了手动从导出的数据集中删除列和关联数据之外)在执行 INSERT 时排除(试图)添加该列?

最佳答案

在hibernate中实体的每个非静态非 transient 属性(取决于访问类型的字段或方法)都被认为是持久的,除非您将其注释为@Transient。

例如,

@Transient
public int counter; //transient property

private String firstname; //persistent property

注释为 @Transient 的方法和字段将被实体管理器忽略。参见 here了解更多信息。

关于java - 如何在使用 dbunit 插入 HSQLDB 期间排除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797170/

相关文章:

java - 同步和静态同步有什么区别?

java - 线程中的异常 "main"org.hibernate.HibernateException : Could not parse configuration: hibernate. cfg.xml

unit-testing - 单元测试入门

spring - 在单元测试期间提交/刷新事务?

java - 用于个人测试的 Grails 中的 Spock 单元测试在 intellij 中不起作用

java - 在android中实现ISO/IEEE 11073-10417标准

java - 提取JSP页面内容

java - 如何从通用ArrayList中查找最小值、最大值和平均值

java - Spring + Hibernate 的 Multi-Tenancy : "SessionFactory configured for multi-tenancy, but no tenant identifier specified"

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Table 'users.user' doesn't exist