首页 > 解决方案 > 一对多的订单与 case hibernate spring

问题描述

我有一个查询,按 2 个日期对实体进行排序:

@Query(value = "from Order order by CASE WHEN created > updated THEN created ELSE updated END desc")

我可以对 @OrderBy 注释中的 @OneToMany 做同样的事情吗?

@OneToMany(cascade = CascadeType.ALL ,mappedBy = "order", fetch = FetchType.EAGER)
@OrderBy(...)
private List<Dish> dishes = new ArrayList<>();

与接受所有订单然后循环遍历它们并通过查询为每个订单查找菜肴相比,这可能会花费更少的时间和性能吗?

标签: javaspringhibernatejpa

解决方案


尝试使用org.hibernate.annotations.OrderBy而不是javax.persistence.OrderBy

声明的 JavaDoc org.hibernate.annotations.OrderBy

使用 SQL 排序(不是 HQL 排序)对集合进行排序。

与 javax.persistence.OrderBy 不同之处在于它需要 SQL 片段,JPA OrderBy 需要一个有效的 JPQL order-by 片段。

这个意思:

  • 您可以使用 SQL 函数
  • 您需要使用 SQL 列名而不是 Java 字段名

推荐阅读