java - 使用 JPA 按嵌套属性排序时结合 DISTINCT 和 ORDER BY
问题描述
我有一个 JPQL 查询,它正在寻找具有可分页的不同记录。在某些情况下,可分页排序将成为嵌套类中的属性。
public class Entity1 {
@Id
private long id;
@ManyToOne
private Entity2 entity2;
}
public class Entity2 {
@Id
private long id;
private String fieldToSort;
}
public interface Entity1Repository extends JpaRepository<Entity1, Long> {
Page<Entity1> findDistinct(Pageable pageable);
}
如果我调用查询排序entity2
,则返回正确的结果。但是,当我尝试按 by 排序时entity2.fieldToSort
,出现以下错误:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
如果我删除DISTINCT
限制,查询运行良好,但返回Entity1
每个Entity2
.
当每个主要实体都需要不同的记录时,处理按子字段排序的最佳方法是什么?
解决方案
通过在存储库中使用嵌套查询解决了这个问题:
@Query("select e1 from Entity1 e1 where e1 in (select e1 from Entity1 e1 left join e1.entity2 e2)")
Page<Entity1> findDistinctCustom(Pageable pageable);
推荐阅读
- python - Python 无法从同一个包中的模块导入函数
- ios - 是否可以影响 AppStore 中呈现的“开发者形象”?
- jenkins - 如何在发布分支下创建标签?
- c++ - Win32 API C++ Hwnd 返回 Null
- wpf - 为什么我不能在 wpf 的资源字典中使用我的静态资源?
- c++ - 如何将 cc_binary 转换为 cc_library?
- python - Python - 从外部命令退出脚本
- algorithm - 子图选择算法问题(动态规划或 NP)
- html - 将现有 Intranet 转换为 Visual Studio .sln 项目文件
- react-testing-library - 如何检查元素是否隐藏在反应测试库自定义查询中?