根據DBUnit文檔link,它應該支持在使用DatabaseSequenceFilter時使用CLEAN_INSERT。DBUnit Sybase無法執行CLEAN_INSERT
我嘗試此
com.sybase.jdbc2.jdbc.SybSQLException: Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'my_db', table name = 'tbl_child', constraint name = 'fk_tbl_child_parentid'.
我的表時出現以下情況例外是這樣的:
CREATE TABLE dbo.tbl_parent
(
parent_id numeric(19,0) IDENTITY,
...
)
CREATE TABLE dbo.tbl_child
(
child_id numeric(19,0) IDENTITY,
parent_id numeric(19,0) NOT NULL,
...
)
ALTER TABLE dbo.tbl_child
ADD CONSTRAINT fk_tbl_child_parentid
FOREIGN KEY (parent_id)
REFERENCES dbo.tbl_parent (parent_id)
而且我DBUnit的數據集是這樣的:
<dataset>
<tbl_parent parent_id="41" ... />
<tbl_child child_id="1361" parent_id="41"/>
</dataset>
左右的時間內我測試類,我有這個代碼我得到錯誤,如果數據已經存在於數據庫中,它不能b E法除去,因爲外鍵約束
@Before
public void setUp() throws Exception {
InsertIdentityOperation.CLEAN_INSERT.execute(getConnection(), getDataSet());
}
有趣的一個解決辦法是使用REFRESH而不是CLEAN_INSERT但這是不太理想的,因爲垃圾數據可以駐留在數據庫中造成的副作用:
@Before
public void setUp() throws Exception {
InsertIdentityOperation.REFRESH.execute(getConnection(), getDataSet());
}
是否有人能夠獲得此CLEAN_INSERT以使用Sybase和外鍵?從閱讀其他職位的MySQL存在類似的問題,所以也許有一個共同的問題,在這裏(或我不理解的東西)
[編輯]
我現在已經運行到同一個後加了我自己的解決辦法回答問題再次。
我使用的Sybase ASE 15 + DBUnit的2.4.8
從我的問題的底部,我特別感興趣的是*是否有人能夠讓這個CLEAN_INSERT與Sybase和外鍵一起工作?*。當測試用例第一次運行時,您的回答不會處理數據庫中存在的垃圾數據問題。如果DELETE_ALL沒有被調用,或者其他進程在我的測試運行之間將數據插入到表中,則會發生這種情況。 – Brad