【问题标题】:JPA: ordering query results by collection valued property?JPA:按集合值属性排序查询结果?
【发布时间】:2012-09-10 16:44:12
【问题描述】:

我有一个实体具有价值属性:

@Entity
public class Scenario{
  ..
  @ManyToMany
  List<Category> categories;
  ..
}

有什么方法可以查询Scenarios 并为categories 属性排序查询结果,如下所示:

select scenario from Scenario scenario order by scenario.category

更准确地说,我们有兴趣从每个Scenario 的列表中对第一类进行排序,而忽略其余的。我们可以在 JPQL/Criteria 查询中做这些事情吗(例如,以某种方式传递自定义 Comparator)?

【问题讨论】:

标签: java jpa orm jpa-2.0


【解决方案1】:

您的问题暗示 categories 集合具有已定义的顺序。如果它是一个索引集合(即它带有 @OrderColumn 注释),并且您希望将 Scenarios 按第一个 name 排序为第一个 Category,您应该能够执行以下操作:

select s from Scenario s left join s.categories c 
where index(c) = 0 order by c.name

【讨论】:

    【解决方案2】:

    我们使用hibernate注解对数据进行排序:

    @Sort(type = SortType.NATURAL)
    private SortedSet<Category> sections = new TreeSet<Category>();
    

    这里我们使用Set 注释,因为我们也想要独特的元素。

    public class Category implements java.io.Serializable, Comparable<Category> {
    
        public int compareTo(Category category) {    
            // Your implementation of compareTo
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2012-06-28
      相关资源
      最近更新 更多