http://www.opensubscriber.com/message/[email protected]/2783511.htmlI guess we should consider supporting UNION in HQL at least for report queries. It makes a lot of sense when you're working on report queries and customers have to fallback to plain JDBC for that. Since we probably some kind of mechanism for union already, why not push it even further... 可能不支持,看版本吧如果是最新的试下,要不就JDBC
没听懂 createAlias() or createCriteria(). criteria的这两个如果不能满足你的要求的话,那应该不能把
做个小结 1.可以直接用sql 2.hibernate里可能有替代union的,试试createAlias() or createCriteria().
我就是想下面sql如果写成hql应该怎么写? select xx from tableClassX union select yy from tableClassY 或者上面的sql如果用hql写不出来,那用Hibernate怎么实现啊?
说不准那天业务就变,写在了配置文件。 <sql-query name="InitMod"> <![CDATA[ SELECT M.MOD_ID,M.URL,M.P_MOD_ID,M.MOD_NAME FROM T_MODULE M INNER JOIN (SELECT A.MOD_ID FROM T_ACL A INNER JOIN T_ACC_ROLE B ON (A.ROLE_ID=B.ROLE_ID) WHERE B.ACC_ID=:accId AND B.PRIORITY= (SELECT MIN(C.PRIORITY) FROM T_ACC_ROLE C INNER JOIN T_ACL D ON (C.ROLE_ID=D.ROLE_ID) WHERE D.MOD_ID=A.MOD_ID AND D.ACC_ID=A.ACC_ID AND D.PRI_TYPE=A.PRI_TYPE) AND A.MOD_ID NOT IN (SELECT E.MOD_ID FROM T_ACL E WHERE E.ACC_ID=B.ACC_ID AND E.PRI_TYPE=:priType AND E.ROLE_ID=:roleId) AND A.ACL_POWER&1=1 UNION ALL SELECT F.MOD_ID FROM T_ACL F WHERE F.ACC_ID=:accId AND F.PRI_TYPE=:priType AND F.ROLE_ID=:roleId AND F.ACL_POWER&1=1) J ON(M.MOD_ID=J.MOD_ID) ]]> </sql-query> 调用代码---- public List searchModules(int accId) { Query query=getSession().getNamedQuery("InitMod"); query.setParameter("accId", accId); query.setParameter("priType", ConstantUtil.ACL_ACC_TYPE); query.setParameter("roleId", ConstantUtil.ACL_DEFAULT_ROLE); return query.list(); }这下相信了吧!!
http://www.opensubscriber.com/message/[email protected]/2783511.htmlI guess we should consider supporting UNION in HQL at least for report
queries. It makes a lot of sense when you're working on report queries
and customers have to fallback to plain JDBC for that. Since we probably
some kind of mechanism for union already, why not push it even further... 可能不支持,看版本吧如果是最新的试下,要不就JDBC
createAlias() or createCriteria().
criteria的这两个如果不能满足你的要求的话,那应该不能把
1.可以直接用sql
2.hibernate里可能有替代union的,试试createAlias() or createCriteria().
我就是想下面sql如果写成hql应该怎么写?
select xx from tableClassX
union
select yy from tableClassY 或者上面的sql如果用hql写不出来,那用Hibernate怎么实现啊?
<sql-query name="InitMod">
<![CDATA[
SELECT M.MOD_ID,M.URL,M.P_MOD_ID,M.MOD_NAME FROM T_MODULE M INNER JOIN
(SELECT A.MOD_ID FROM T_ACL A INNER JOIN T_ACC_ROLE B ON (A.ROLE_ID=B.ROLE_ID)
WHERE B.ACC_ID=:accId
AND B.PRIORITY=
(SELECT MIN(C.PRIORITY)
FROM T_ACC_ROLE C INNER JOIN T_ACL D ON (C.ROLE_ID=D.ROLE_ID)
WHERE D.MOD_ID=A.MOD_ID AND D.ACC_ID=A.ACC_ID AND D.PRI_TYPE=A.PRI_TYPE)
AND A.MOD_ID NOT IN
(SELECT E.MOD_ID FROM T_ACL E WHERE E.ACC_ID=B.ACC_ID AND E.PRI_TYPE=:priType AND E.ROLE_ID=:roleId) AND A.ACL_POWER&1=1
UNION ALL
SELECT F.MOD_ID FROM T_ACL F WHERE F.ACC_ID=:accId AND F.PRI_TYPE=:priType AND F.ROLE_ID=:roleId AND F.ACL_POWER&1=1) J
ON(M.MOD_ID=J.MOD_ID)
]]>
</sql-query> 调用代码----
public List searchModules(int accId) {
Query query=getSession().getNamedQuery("InitMod");
query.setParameter("accId", accId);
query.setParameter("priType", ConstantUtil.ACL_ACC_TYPE);
query.setParameter("roleId", ConstantUtil.ACL_DEFAULT_ROLE);
return query.list(); }这下相信了吧!!
那要变相配置对象实体。根本就不是一个UNION符号的事情。
from XX,YY;