HQL与临时表的左外连接

时间:2016-11-01 18:30:14

标签: sql nhibernate hql

我正在尝试使用在运行时创建的表上的左外连接创建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

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

你做不到。 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查询。