2017-08-11 57 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與新的,你可能會發現不同的約束。

有時以前的測試會在數據庫中留下數據;運行兩個顯示問題的測試,並在第一個測試後查看數據,確保清理所有表格。

相關問題