NHibernate的从HQL
问题描述:
扩大复合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
。
答
这很可能是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);