我尝试使用数据库单元加载具有标识列的表。我希望能够自己设置 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)
没问题。但是当我尝试使用以下数据库单元 XML 数据集 (RS_7_10_minimal_ini.xml) 加载此表时
<dataset>
<X id="666"/>
</dataset>
使用以下最小 JUnit (DBTestCase) 测试用例:
package lms.lp.functionnal_config;
import java.io.FileInputStream;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import lms.DBUnitConfig;
import org.junit.Test;
public class SampleTest extends DBTestCase
{
public SampleTest(String name)
{
super( name );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, DBUnitConfig.DBUNIT_DRIVER_CLASS );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, DBUnitConfig.DBUNIT_CONNECTION_URL );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, DBUnitConfig.DBUNIT_USERNAME );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, DBUnitConfig.DBUNIT_PASSWORD );
}
protected IDataSet getDataSet() throws Exception
{
return new FlatXmlDataSetBuilder().build(new FileInputStream("src/test/resources/RS_7_10_minimal_ini.xml"));
}
@Test
public void testXXX() {
// ...
}
}
它失败并出现以下异常
com.sybase.jdbc3.jdbc.SybSQLException: Explicit value specified for identity field in table 'X' when 'SET IDENTITY_INSERT' is OFF.
在插入指定了标识列的值的行之前,数据库单元似乎没有打开标识。
我已经尝试在从 JdbcDataBaseTester 检索到的连接上执行自己,但没有运气。可能是用于将数据推送到数据库的新连接或不同的连接。
任何想法?
非常感谢大家的帮助!
八度