2017-10-11 311 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);