Junit 在表上打开IDENTITY_INSERT以加载DB单元
我尝试加载一个表,该表有一个标识列,带有DB Unit。我希望能够自己设置id值(我不希望数据库为我生成它) 这是我的表的最小定义Junit 在表上打开IDENTITY_INSERT以加载DB单元,junit,sybase,dbunit,identity-column,identity-insert,Junit,Sybase,Dbunit,Identity Column,Identity Insert,我尝试加载一个表,该表有一个标识列,带有DB Unit。我希望能够自己设置id值(我不希望数据库为我生成它) 这是我的表的最小定义 create table X ( id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL ) 要在X中插入一行,我执行以下SQL set INDENTITY_INSERT X ON insert into X(id) VALUES(666) 没问题。但是当我尝试用下面的db单元XML数据集(RS_7_10_minimal_
create table X (
id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL
)
要在X中插入一行,我执行以下SQL
set INDENTITY_INSERT X ON
insert into X(id) VALUES(666)
没问题。但是当我尝试用下面的db单元XML数据集(RS_7_10_minimal_ini.XML)加载这个表时
它失败了,出现以下异常
com.sybase.jdbc3.jdbc.SybSQLException: Explicit value specified for identity field in table 'X' when 'SET IDENTITY_INSERT' is OFF.
在插入指定了标识列值的行之前,DB单元似乎没有打开标识
我已经尝试在从JdbcDataBaseTester检索到的连接上执行我自己,但没有成功。可能是一个新的连接,也可能不是用于将数据推入de DB的相同连接
有什么想法吗
非常感谢大家的帮助
八度音阶对DBUnit不够熟悉,无法帮助您了解细节;但在类似的情况下,我使用了一个表截断并重新播种标识值
dbcc checkident
是的,实际上在DBUnit常见问题解答中找到了解决方案 我可以将DbUnit与标识列或自动增量列一起使用吗 许多RDBMS允许使用客户端值隐式覆盖标识列和自动增量列。DbUnit可以本机与这些RDBMS一起使用。一些数据库,如MS SQL Server和Sybase,需要显式激活客户端值。激活此功能的方式取决于供应商。 DbUnit通过InsertIdentityOperation类为MS SQL Server提供此功能 虽然它是为MS SQL Server编写的,但它也适用于Sybase。所以我用
new InsertIndentityOperation(DatabaseOperation.CLEAN_INSERT).execute(connection,initialDataSet);
等等
谢谢您的回答,罗海瑟。这是打字错误还是名称改为InsertIdentityOperation?在我的
getSetUpOperation()
中,我使用了returnnewinsertidentityoperation(DatabaseOperation.CLEAN\u INSERT)代码>
dbcc checkident
new InsertIndentityOperation(DatabaseOperation.CLEAN_INSERT).execute(connection,initialDataSet);