【问题标题】:HQL Left outer join with temp tablesHQL 与临时表的左外连接
【发布时间】:2016-11-01 18:30:13
【问题描述】:

我正在尝试在运行时创建的表上使用左外连接创建 HQL 查询。

下面的代码是简化的HQL查询,基本一样。。 左外连接子句中的任何内容都是在运行时创建的,并且不受联合中选择的数量的限制

select distinct  r.Param1,  r.Param2,  r.Param3
from Classpath.Classname r 
left outer join ( 
    select something1, something2 from somewhere where something1 in (1,2,3)
    union all 
    select something1, something2 from somewhere where something1 not in (5,8,9)
    union all 
    select something1, something2 from somewhere where something1 = 10
) tblName on tblName.something = r.Param1
where other conditions

我怎样才能做到这一点?

【问题讨论】:

    标签: sql nhibernate hql


    【解决方案1】:

    你不能。 FROMJOIN 语句始终与映射实体相关...因为 NHiberante 是 ORM 工具。

    如果需要这么复杂的 SQL 语句,请使用:

    session.CreateSQLQuery(" ... any raw SQL ...")
    

    这不是关于 HQL 而是纯粹的 SQL。

    9.3.5. Queries in native SQL

    您可以使用 CreateSQLQuery() 在 SQL 中表达一个查询。你必须 用大括号将 SQL 别名括起来。

    IList<Cat> cats = session.CreateSQLQuery(
        "SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10",
        "cat",
        typeof(Cat)
    ).List<Cat>();
    
    IList<Cat> cats = session.CreateSQLQuery(
        "SELECT {cat}.ID AS {cat.Id}, {cat}.SEX AS {cat.Sex}, " +
               "{cat}.MATE AS {cat.Mate}, {cat}.SUBCLASS AS {cat.class}, ... " +
        "FROM CAT {cat} WHERE ROWNUM<10",
        "cat",
        typeof(Cat)
    ).List<Cat>()
    

    SQL 查询可能包含命名参数和位置参数,就像 NHibernate 查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多