如何在唯一的映射或非对象 JPA 中返回多个结果
Posted
技术标签:
【中文标题】如何在唯一的映射或非对象 JPA 中返回多个结果【英文标题】:How to return multiple results in a unique mapped or not object JPA 【发布时间】:2015-05-07 20:36:14 【问题描述】:org.hibernate 休眠核心 4.3.8.决赛 org.hibernate 休眠实体管理器 4.3.8.决赛 我的 pom.xml
我的问题是:如何进行这样的查询...
SELECT
TABLE_D.*,
TABLE_A.NAME_A
FROM
TABLE_D
INNER JOIN
TABLE_E
ON TABLE_D.ID_TAB_E = TABLE_D.ID_TAB_D
LEFT JOIN
TABLE_C
ON TABLE_C.ID_TAB_C = TABLE_D.ID_TAB_D
INNER JOIN
TABLE_B
ON TABLE_B.ID_TAB_B = TABLE_C.ID_TAB_C
INNER JOIN
TABLE_A
ON TABLE_A.ID_TAB_A = TABLE_B.ID_TAB_B
WHERE
TABLE_A.NAME_A = "XXXX";
并在 JPA 中返回唯一对象列表中的选定值 TABLE_D 和 TABLE_A(例如:我创建的对象以获取所有这些字段)(我可以创建 1 个过滤器,无论如何...)?请帮忙。
【问题讨论】:
显示你的实体类 它们太大了,但我只需要一节课就可以拿到这些文件。当我使用 getConnection().createNativeQuery(sql.toString(), Table_D.class) 时,它只返回 TABLE_D 字段和您的 fk 实体 TABLE_E 和 TABLE_C。所以我看不懂 TABLE_B 和 A。 【参考方案1】:如果您需要在 HQL 中返回选定列的列表,您可以编写您的 hql 查询并返回一个对象数组列表,即:
List<Object[]> result = session.createQuery("select a.field1, b.field2 from EntityA a join a.entityB b").list();
然后您可以根据它们的类型(即字符串)迭代并获取值:
for (Object[] arr : result)
String col1 = (String)arr[0];
String col2 = (String)arr[1];
【讨论】:
我可以使用与 createNativeQuery() 相同的 ideia 吗? 是的,只是列类型在 createQuery 和 createNativeQuery 中可能不同,即在进行强制转换时,它可能是 BigInteger 而不是 Integer。但是你没有理由使用原生 SQL,因为你的查询完全被 hql 和 jpql 支持......以上是关于如何在唯一的映射或非对象 JPA 中返回多个结果的主要内容,如果未能解决你的问题,请参考以下文章
如何告诉 JPA CriteriaBuilder 按返回的唯一数据列排序?