spring-data-jpa - JPA 中的联合和使用别名
问题描述
我有 2 个实体,PERSON和PEOPLE
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
有什么可以做的建议吗?为什么将计数放在生成的查询前面?提前欣赏。
解决方案
为什么将计数放在生成的查询前面?
因为您正在尝试使用分页 ( Pageable
) 获取数据。因此,对于总元素计数 Count 查询正在执行。
有什么可以做的建议吗?
您正在使用基于类的投影并使用List<Human>
@Query(value="SELECT FIRSTNAME, LASTNAME FROM ...")
List<Human> getEntireHumanRace();
推荐阅读
- visual-studio-code - VSCode 调试控制台不断跳到顶部
- python - 如何在基类中使用子类的函数属性?
- php - PHP多维数组按值排序
- ruby-on-rails - 获取关系计数的活动记录查询
- c# - SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_Users_Companies_CompanyId”冲突
- sql - 如何根据psql中的一条记录的值排除具有相同ID的所有行?
- javascript - Zapier 自定义响应对象
- express - 无法使用 passport-jwt 访问受保护的路线
- tensorflow - 如何在 TensorFlow 中计算次梯度?
- scala - 为什么 Scala 强制使用 Await 而不是 Awaitable?