Ich versuche eine Tabelle mit einer Identitätsspalte mit DB Unit zu laden. Ich möchte in der Lage sein, den ID-Wert selbst einzustellen (ich möchte nicht, dass die Datenbank es für mich generiert).IDENTITY_INSERT in einer Tabelle einschalten, um sie mit DB Unit zu laden
Hier ist eine minimale Definition meiner Tabelle
create table X (
id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL
)
eine Zeile in X einzufügen, führe ich die folgenden SQL-
set INDENTITY_INSERT X ON
insert into X(id) VALUES(666)
Kein Problem. Aber wenn ich versuche, diese Tabelle zu laden, mit dem folgenden db Einheit XML-Datensatz (RS_7_10_minimal_ini.xml)
<dataset>
<X id="666"/>
</dataset>
mit dem folgenden minimalen JUnit (DBTestCase) Testfall:
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() {
// ...
}
}
Es schlägt mit dem folgenden Ausnahme
com.sybase.jdbc3.jdbc.SybSQLException: Explicit value specified for identity field in table 'X' when 'SET IDENTITY_INSERT' is OFF.
Es scheint DB Einheit Identität lässt sich nicht einschalten, bevor Sie eine Zeile einzufügen, für den der Wert der Identitätsspalte angegeben ist.
Ich habe bereits versucht, mich auf der Verbindung aus dem JdbcDataBaseTester abgerufen, aber kein Glück. Wahrscheinlich eine neue Verbindung oder nicht die gleiche Verbindung verwendet, um die Daten in de DB zu schieben.
Irgendeine Idee?
Vielen Dank für Ihre Hilfe alle!
Octave
Ist das ein Tippfehler oder hat sich der Name in InsertIdentityOperation geändert? In meiner 'getSetUpOperation() 'habe ich' neue InsertIdentityOperation (DatabaseOperation.CLEAN_INSERT); ' – dustmachine
Du bist ein Lebensretter :) vielen Dank ... –