2017-10-11 309 views
0

擴大複合ID我們有一個表映射覆合主鍵,如下圖所示:NHibernate的從HQL

mapping.CompositeId().KeyReference(e => e.Node).KeyProperty(e => e.DtFr).UnsavedValue("any"); 

我們需要從由複雜的條件下的表中刪除多個行,例如n.Node.Contract.Code = "1234"

按照solution我們嘗試下一個HQL:

delete from Entity n where n in (select c from Entity c where c.Node.Contract.Code = "1234") 

但在生成的SQL查詢周圍有主鍵列沒有括號:

select ... from ENTITY n where n.IDNODE, n.DTFR in (select c.IDNODE, c.DTFR ... 

我們試圖明確在HQL(where (n) in)加括號,但NHibernate的忽略它們。

我們可以做些什麼來使NHibernate生成正確的SQL?

NHibernate的版本是4.1.1.4000,RDBMS是Oracle 10.2

SQL方言設置爲NHibernate.Dialect.Oracle10gDialect

回答

1

這很可能是NHibernate中的一個錯誤。問題補充:https://github.com/nhibernate/nhibernate-core/issues/1376

所以現在唯一的解決方案是:加載你想要刪除的所有實體,然後刪除它們。

var entities2delete = session.CreateQuery("select c from Entity c where c.Node.Contract.Code = \"1234\"").List(); 
foreach (var item in entities2delete) session.Delete(item);