作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 DbUnit 框架对我的 JPA 实体 bean 进行单元测试。我已经从数据库表生成了实体。还将 DB 数据导出到 xml 文件中,DbUnit 在执行测试时可以使用这些文件。
但是对于每个测试我都会收到错误:
Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; UK_25T4P9GXGVRCC8R3VL93JKAJE table: NEW_TAB
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Constraint.getException(Unknown Source)
at org.hsqldb.index.IndexAVLMemory.insert(Unknown Source)
at org.hsqldb.persist.RowStoreAVL.indexRow(Unknown Source)
at org.hsqldb.TransactionManager2PL.addInsertAction(Unknown Source)
at org.hsqldb.Session.addInsertAction(Unknown Source)
at org.hsqldb.Table.insertSingleRow(Unknown Source)
at org.hsqldb.StatementDML.insertSingleRow(Unknown Source)
at org.hsqldb.StatementInsert.getResult(Unknown Source)
at org.hsqldb.StatementDMQL.execute(Unknown Source)
at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
我的测试 persistence.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.dummy.entity.NewTab</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:UNITTEST"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
每个测试用例都使用以下命令执行:
try {
final DatabaseConnection connection = new DatabaseConnection(jdbcConnection);
//connection.getConnection().prepareStatement("SET DATABASE REFERENTIAL INTEGRITY FALSE").execute();
final DatabaseConfig config = connection.getConfig();
// config.setProperty(FEATURE_QUALIFIED_TABLE_NAMES, true);
config.setProperty(PROPERTY_ESCAPE_PATTERN, "\"?\"");
config.setProperty(PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
final List<IDataSet> dataSets = getDataSets();
if (dataSets != null) {
for (IDataSet dataSet : dataSets) {
dbOperation.execute(connection, dataSet);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
对于多个实体的每次测试,我都会收到此错误。所以我感觉我的配置有问题。如果您有任何想法,请告诉我。
最佳答案
我通过删除每个 JPA 实体字段的 @Column 注释的 attribure unique=true 解决了这个问题。不知道为什么 DBUnit 不明白该 JPA 实体有一个复合键。
删除 unique = true 不会影响我,因为我没有在数据库上执行任何创建/更新/取消事务。我只执行读操作。
关于java - DbUnit + HSQLDB + JPA 实体 : integrity constraint violation: unique constraint or index violation; UK_25T4P9GXGVRCC8R3VL93JKAJE table: NEW_TAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190252/
我是一名优秀的程序员,十分优秀!