我正在尝试使用在运行时创建的表上的左外连接创建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
我该如何做到这一点?
答案 0 :(得分:0)
你做不到。 FROM
和JOIN
语句始终与映射实体相关...因为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查询。