【问题标题】:JPA , sorting query by collection last date valued propertyJPA,按集合最后日期值属性排序查询
【发布时间】:2018-05-11 16:33:37
【问题描述】:

我的项目中有两个具有休眠关系的实体

@Entity
class IssueEntity {

@OneToMany
List<CorrespondenceEntity> correspondenceList;
}

@Entity
public class CorrespondenceEntity {

Date modifyDate;

@ManyToOne
IssueEntity issue;
} 

可以使用 JPQL 创建查询,该查询根据集合“correspondenceList”-“modifyDate”中包含的属性的最后(最大)日期从 IssueRepository 中获取 IssueEntity

【问题讨论】:

  • 是的......到目前为止你尝试过什么?
  • 我尝试在 AND 子句中使用其他 SELECT,但拼写不正确,并且在某处我找到了使用 index(x) jpql 方法的自定义索引的解决方案,但没有成功
  • 好的,所以我们得到了与 max(modifiedDate) 对应的 IssueEntity,然后我们再次按 ..modifiedDate 对所有这些 IssueEntity 进行排序?如果您添加本机 sql 查询以清除空气会很好
  • 本机查询不支持可分页对象,我需要在我的情况下使用它
  • 你有一个反向引用,所以从 CorrespondenceRepository 查询更容易:SELECT DISTINCT c.issue FROM CorrespondenceEntity c ORDER BY c.modifyDate

标签: java jpa spring-data jpql


【解决方案1】:

是的,我知道问题是

可以(或是否)可以使用 JPQL 创建查询

不管怎样

JPA,按集合最后日期值属性排序查询

可以用注解@OrderBy,比如

@OneToMany
@OrderBy("modifyDate DESC") // or "modifyDate ASC" whatever suits better
List<CorrespondenceEntity> correspondenceList;

API docs

【讨论】:

  • 是的,这是解决我的案例的第一步,但我仍然没有找到解决方案来获取集合的第一个元素(通过注释订购后 CorrespondenceEntity 的最后“修改日期”)并在“ order by" JPQL 子句在 IssueEntity @Query(value ="SELECT i FROM IssueEntity i LEFT JOIN i.correspondenceList co ORDER BY // get first element of collection and value of modifyDate // " )
  • 好的,看来我没有完全理解你的问题。也许您应该将您现在拥有的 JPQL 添加到问题中,最好是几行示例数据以及查询应该从该示例数据返回什么。 CorrespondenceEntity 和他最新的 modifyDate 在列表中显然是你得到的 correspondenceList.get(0) 假设不为空。
  • @luafanti btw: 是否可以使用 CriteriaQuery 代替?
  • 也许有可能,就像我看到 crriteriaQuery 支持可分页一样,在我的情况下这是必要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2014-08-04
  • 2016-07-10
  • 2015-03-16
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多