2017-10-11 3 views
0

から複合IDを展開:NHibernateは、以下に示すように我々は、マッピングされた複合主キーを持つテーブルを持ってHQL

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

我々は、複合条件によるテーブルから複数の行を削除する必要があり、例えば、n.Node.Contract.Code = "1234"

我々は次のHQLしようとしたsolutionによると:

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); 
関連する問題