java - 如何在 hibernate 中使用联合执行查询?

标签 java hibernate hql

Hibernate 不支持 union,所以我想单独运行 sql。但最终如何结合这些值(value)观?

String query ="select
dp.PRODUCTFAMILY,dp.PRODUCTFAMILYDESCR
from TABEL1 dd, TABEL2 DP
where dd.id = 00002
and dd.PRODUCTFAMILY is null
union
select
dp.DIVNUMBER,dp.DIVDESCR
from TABEL1 dd, TABEL2 DP
where dd.id = 00002
and dd.PRODUCT is not null and dd.PRODUCTFAMILY is not null";

public List<PRODUCT> findmethod() {
        return findAllByQuery(query);
   }

请指教如何分别执行两个 sql,最后如何组合这些值?

最佳答案

请注意,UNION 中的每个 SELECT 语句必须具有相同的列数。这些列还必须具有相似的数据类型。此外,每个 SELECT 语句中的列必须采用相同的顺序。

如果这是真的,请为您的查询添加别名:

select
dp.PRODUCTFAMILY as PRODUCTFAMILY,dp.PRODUCTFAMILYDESCR as PRODUCTFAMILYDESCR
from TABEL1 dd, TABEL2 DP
where dd.id = 00002
and dd.PRODUCTFAMILY is null
union
select
dp.DIVNUMBER as PRODUCTFAMILY,dp.DIVDESCR as PRODUCTFAMILYDESCR
from TABEL1 dd, TABEL2 DP
where dd.id = 00002
and dd.PRODUCT is not null and dd.PRODUCTFAMILY is not null

您可以以这种方式使用 SQLQuery 和 AliasToBeanResultTransformer:

session.createSQLQuery(above sql with union).addScalar("PRODUCTFAMILY",StringType.INSTANCE).addScalar("PRODUCTFAMILYDESCR",StringType.INSTANCE).setResultTransformer(new AliasToBeanResultTransformer(PRODUCT.class))

PRODUCT 必须有一个空的构造函数和字段访问器。

否则,如果此联合旨在提取具有不同类型的不同字段,您必须分别运行两个查询,addAll() 的第二个结果到第一个!

关于java - 如何在 hibernate 中使用联合执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257757/

相关文章:

java - 一次在一个屏幕上显示两个 Activity

java - Java桌面连接云接口(interface)

java - 无法将 '0000-00-00 00:00:00' 转换为 TIMESTAMP

Hibernate HQL 使用 和 删除

java - 如何在java中声明和填充另一个对象 vector 内的对象 vector ?

java - 如何在Java中将数字按升序排列在数组列表中?

java - HSQLDB:原因:使用 MAX,但不使用 Group By,并获取 java.sql.SQLSyntaxErrorException:表达式不在聚合或 GROUP BY 列中:

hibernate - Hibernate在Database First开发中找不到表

java - 如何让 HSQLDB 在从 .script 文件初始化数据源期间发出错误消息?

java - 从SQL查询转化为HQL查询问题