【问题标题】:NHibernate expand composite id from HQLNHibernate 从 HQL 扩展复合 id
【发布时间】:2017-10-11 09:00:52
【问题描述】:

我们有一个映射了复合主键的表,如下所示:

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 hql composite-primary-key


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多