【问题标题】:Error in creating table in in-memory database using DBUnit使用 DBUnit 在内存数据库中创建表时出错
【发布时间】:2013-06-10 14:20:56
【问题描述】:

我正在尝试将 XML 文件中的数据和表导入内存数据库,该 XML 文件是我使用 DBUnit 自动创建的。这是我正在映射的两个类: 工作簿映射:

@Entity(name="Workbook")
public class WorkbookMapping implements Serializable {
@Id
@GeneratedValue
private int id;

@OneToMany(cascade = CascadeType.ALL )
List<SpreadSheetMapping> list = new ArrayList<SpreadSheetMapping>();

public WorkbookMapping() {
}

public WorkbookMapping(Workbook workbook) {
    for (int i = 0; i < workbook.getSpreadsheetCount(); i++) {
        list.add(new SpreadSheetMapping(workbook.getSpreadsheet(i)));
    }

}
}

电子表格映射:

@Entity(name="Spreadsheet")
public class SpreadSheetMapping implements Serializable {
@Id
@GeneratedValue
private long id;

@OneToMany(cascade = CascadeType.ALL)
List<CellMapping> list;

public SpreadSheetMapping() {
}

public SpreadSheetMapping(Spreadsheet sp) {
    list = new ArrayList<CellMapping>();
    for (int r = 0; r < sp.getRowCount(); r++) {
        for (int i = 0; i < sp.getColumnCount(); i++) {
             list.add(new CellMapping(sp.getCell(i, r)));
        }
    }
}
}

这是我的 hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:mem:DBMemoria</property>
<property name="connection.username"/>
<property name="connection.password"/>
<property name="connection.pool_size">1</property>
<mapping class="csheets.io.WorkbookMapping"/>
<mapping class="csheets.io.SpreadSheetMapping"/>
<mapping class="csheets.io.CellMapping"/>
</session-factory>
</hibernate-configuration>

这是我用来将所有数据导入数据库的代码:

Connection jdbcConnection;
jdbcConnection = DriverManager.getConnection("jdbc:hsqldb:mem:DBMemoria", "", "");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
IDataSet dataSet = new XmlDataSet(stream);
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);

我收到了这个错误:

org.dbunit.dataset.NoSuchTableException: WORKBOOK_SPREADSHEET   
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)

有什么帮助吗?

【问题讨论】:

    标签: java xml hibernate mapping dbunit


    【解决方案1】:

    您的实体不适用于您在导入文件中定义的表。你应该添加

    @Entity
    @Table(name = "WORKBOOK_SPREADSHEET")
    

    在适当的实体上。

    【讨论】:

      【解决方案2】:

      @Adam,我认为我们需要查看 XML 数据集。正如@Aleksandra 提到的那样,您没有创建 WORKBOOK_SPREADSHEET 表的类。实体必须映射到 XmlDataSet 中的表。

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 2016-11-24
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        相关资源
        最近更新 更多