【问题标题】:How to have a sorted set of objects based on a specific field?如何根据特定字段对一组对象进行排序?
【发布时间】:2015-06-15 06:23:49
【问题描述】:

我需要根据sort field 检索对象的排序列表;他们的集合类型是SortedSet,但代码会引发以下异常。 我还尝试添加@Sort 注释,如hibernate documentation 的排序集合部分中所述,但它似乎已被弃用!

例外

Caused by: org.hibernate.AnnotationException: A sorted collection must define and ordering or sorting

代码

SortedSet<Offer> offers = new TreeSet<Offer>();

类

public class Person {
 @Id
 long id;
 @OneToMany 
 //@OrderBy("sort ASC") <<< If I use this just one offer will be in the collection 
 SortedSet<Offer> offers = new TreeSet<Offer>();
 ...
}

public class Offer implements Comparable<Offer>{

 @Id
 long id;
 String name;
 short sort;
 @Override
 public int compareTo(Offer o) {
    return sort - o.sort;
 }
}

【问题讨论】:

  • 您要根据哪些基础进行排序?看来您正在尝试对一个类而不是 Integer 或 String 进行排序??
  • 我不使用 Hibernate,但将其标记为已弃用的 javadocs 有一条评论,“根据需要使用 SortComparator 或 SortNatural。”听起来您需要 SortComparator。
  • 我需要根据其排序字段的值对 Offer 集合的 Offer 对象进行排序。

标签: java hibernate sorting


【解决方案1】:

您需要指定要放在 ORDER BY 子句中的列名

尝试将此注解添加到 SortedSet

@javax.persistence.OrderBy("sort")

如果您需要按多列排序,请参阅this answer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多