2011-06-29 30 views
2

我對整個JPA後端進行了200多次單元測試,並且它們都在hsql db 2.2上運行良好。我有在連續的構建環境中運行的測試來驗證系統的穩定性。除了在Oracle 11上運行它們時,有些測試因參照完整性約束而失敗。這是由於我的代碼中存在一個錯誤,但是我在hsqldb中找不到它們的事實關係到我,並且違反了內存中符合jpa的輕量級數據庫的全部要求,因爲它不符合實際情況!如何在HSQL Db內存單元測試中啓用參照完整性

是否有一個設置可以觸發hsqldb在運行測試時考慮引用完整性。我懷疑他們在默認情況下被忽略。這些是我的jdbc設置:

jdbc.driver=org.hsqldb.jdbcDriver 
jdbc.url=jdbc:hsqldb:mem:SampleProject 
jdbc.username=sa 
jdbc.password= 
+0

一個DB不符合JPA,一個JPA實現。也許你的JPA實現對Oracle有問題(因爲甲骨文,我們應該說,「延伸」了各個領域的JDBC規範的條款)。 – DataNucleus

回答

1

您可以使用: 「組數據庫的引用完整性FALSE」 和 「組數據庫的引用完整性TRUE」 SQL語句

0

HSQLDB對引用完整性非常嚴格,除非它被關閉。對於不同的數據庫,JPA實現在此區域實際使用不同的策略。例如,對於一個數據庫引擎,實現可以通過級聯刪除來定義外鍵,並刪除父對象,但對於其他引擎,它可能會在刪除父對象之前單獨刪除對象的子對象。

因此,HSQLDB作爲開發數據庫可以幫助您在很大程度上找到錯誤,但仍需要通過針對目標數據庫運行來驗證您的軟件。

回過頭來看看這個特定的問題,如果你運行你的測試之一,像這樣的文件數據庫:

jdbc.url=jdbc:hsqldb:file:/home/db/SampleProject;hsqldb.write_delay=false;shutdown=true 

然後,您可以用將DatabaseManager打開數據庫的測試後,檢查表和約束定義。如果JPA確實創建了外鍵,那麼如果嘗試進行一些插入和刪除操作,則可以自行檢查HSQLDB是否強制實施了這些限制。