2017-08-11 55 views
0

我试图升级我的Hibernate库的一些遗留代码和我突然收到在我的单元测试违反唯一约束:Dbunit升级给出了唯一的约束违规?

java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation; SYS_PK_10344 table: GROUP 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.execute(Unknown Source) 
    at org.dbunit.database.statement.SimplePreparedStatement.addBatch(SimplePreparedStatement.java:67) 
    at org.dbunit.database.statement.AutomaticPreparedBatchStatement.addBatch(AutomaticPreparedBatchStatement.java:57) 
    at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:178) 
    at gov.treas.fms.shared.test.spring.AbstractTransactionalSpringTest.loadDataset(AbstractTransactionalSpringTest.java:551) 
    ... 21 more 
Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; SYS_PK_10344 table: GROUP 
    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) 
    ... 27 more 

新版本的库

休眠公地的注解:4.0.5 .Final
休眠-的EntityManager:4.3.10.Final 冬眠核:4.3.10.Final
冬眠-JPA-2.1-API:1.0.0.Final
HSQLDB 2.3.4
的DbUnit: 2.1

旧版本的库

冬眠的注解:3.4.0.GA
休眠公地的注解:3.1.0.GA
休眠-的EntityManager:3.4.0.GA
hibernate-核心:3.3.0.SP1
HSQLDB:1.8.0.7
的DbUnit:2.1

的实体是这样的:

@AttributeOverrides(
    { 
      @AttributeOverride(name = "id", column = @Column(name = "group_id")) 
    } 
) 
public class Group extends AbstractIdentity { 
    private String description; 

    private String name; 

    //getters and setters 

} 


public abstract class AbstractIdentity { 

    private long id; 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IdSequenceGenerator") 
    public Long getId() 
    { 
     return id; 
    }  
} 

的DbUnit的数据集是这样的:

<dataset> 
    <group group_id="100" 
     description="Group description" 
     name="Group name"/> 
</dataset> 

它装有这样的:

IDataSet dataset = constructDbUnitDataset(datasetResourcePath); 
DatabaseOperation.INSERT.execute(connection, dataset); 

的DataOperation.INSERT线就是我得到的例外。

请注意,如果我运行一个单元测试,它会通过。如果我运行多个,我会得到上述例外。

任何帮助将不胜感激!

回答

0

比较先前Hibernate版本的DDL gen与新的,你可能会发现不同的约束。

有时以前的测试会在数据库中留下数据;运行两个显示问题的测试,并在第一个测试后查看数据,确保清理所有表格。

相关问题