2011-12-21 51 views
1

我正在從Oracle向SQL Server遷移Hibernate上的某個項目(我不確定它是嵌入到JBoss5.1.0GA中的版本,看起來像3.x)。SQL謂詞上的SQL Server + hibernate組合鍵失敗

一個查詢的HQL的樣子:

... 
FROM k join k.defs kd 
    ... 
WHERE ... 
    kd not in (SELECT d.defs FROM d ...) 

在MSSQL此查詢執行(和失敗)爲:

.... 
WHERE 
    ( 
    (kd.ITEM_ID, kd.DEF_ID) not in (
     SELECT 
      defs.ITEM_ID, defs.DEF_ID 

我​​實體有2場ITEM_ID和DEF_ID複合鍵。 SQL Server失敗是因爲與Oracle相比不支持複合IN謂詞。

很明顯,這是Hibernate產生的映射中的一個錯誤。我的問題是:如何配置/修補Hibernate以提供入伍樣本的逐場比較?

回答

0

這應該完成同樣的事情。左外連接包括k中的所有行和on中匹配的行中的行。 d不匹配時爲空。我的語法可能會有一點 - 我不是在那裏測試它,但我希望這可以讓你開始。

FROM k join k.defs kd 
left outer join d.defs kd 
    ... 
WHERE ... 
    d is null 
+0

感謝您關注我的問題。 「NOT EXISTS」是替代'NOT IN'謂詞的更優雅的方式。但是我將把它作爲最後的解決方案 - 因爲代碼是遺留的,更改會導致副作用。所以在使用hibernate進行操作時出現問題 - 要進行修補(可能需要更高的版本或更改特定的類)。 – Dewfy 2011-12-22 07:47:24