首页 > 解决方案 > JPA 中的联合和使用别名

问题描述

我有 2 个实体,PERSONPEOPLE

PERSON有列 -> FN, LN

PEOPLE有列 -> FIRST, LAST

我想同时获取两个表的并集。我如何在 JPA 中做到这一点。我使用了以下方式:

创建了一个新的 DTO -> Human有 2 个字段 FIRSTNAME 和 LASTNAME(区分大小写)

@Query(value=" SELECT FIRSTNAME, LASTNAME FROM "+
  "(  SELECT "+
  "      P.FN AS FIRSTNAME, "+
  "      P.LN AS LASTNAME " +
  " FROM PERSON P"+
  " UNION "+
  " SELECT "+
  "      A.FIRST AS FIRSTNAME, "+
  "      A.LAST AS LASTNAME ' +
  " FROM PEOPLE A"+
  ")", nativeQuery = true)
Pageable<Human>  getEntireHumanRace() {
.... 
}

SQL 运行良好,但 ORM 总是形成格式错误的 SQL,例如“SQL 语句中的语法错误 SELECT COUNT(P) FROM PERSON P ....” InvalidDataAccessResourceUsageException: could not prepare statement

有什么可以做的建议吗?为什么将计数放在生成的查询前面?提前欣赏。

标签: spring-data-jpaunionhibernate-mappingnativequery

解决方案


为什么将计数放在生成的查询前面?

因为您正在尝试使用分页 ( Pageable) 获取数据。因此,对于总元素计数 Count 查询正在执行。

有什么可以做的建议吗?

您正在使用基于类的投影并使用List<Human>

@Query(value="SELECT FIRSTNAME, LASTNAME FROM ...")
List<Human> getEntireHumanRace();

推荐阅读