【问题标题】:Is it possible to use the JPA @OrderBy annotation to sort in a case-insensitive way?是否可以使用 JPA @OrderBy 注释以不区分大小写的方式进行排序?
【发布时间】:2014-03-08 12:07:04
【问题描述】:

我正在使用 JPA 2.0、Hibernate 4.1.0.Final 和 MySQL 5.5。我想使用 @OrderBy 注释对我的一个实体中的集合进行排序……

@OneToMany(mappedBy = "classroom", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval=true)
@OrderBy(“name”)
private Set<User> roster;

但是,我希望以不区分大小写的方式对集合进行排序,或者至少根据“名称”属性的小写字母对所有内容进行排序。 JPA可以做到这一点吗?如果这能解决我的问题,我可以升级我的 JPA 和 Hibernate 版本。

【问题讨论】:

  • 这依赖于 Hibernate 而不是纯 JPA,但您可以查看 stackoverflow.com/questions/19871765/…
  • 另一种变化可能是在数据库中定义一个计算列,如lower(name),为其定义一个属性(使其为只读),然后按它排序。然后又不是很 JPA-ish。
  • 关于您发布的第一个链接,他在哪里进行不区分大小写的排序?将我的变量设为 SortedSet 并不能解决我的问题。
  • 让你的实体实现Comparable并按照你的意愿实现...
  • 我不想那样做,反正这不是我的问题。

标签: hibernate jpa sql-order-by jpa-2.0 jpa-2.1


【解决方案1】:

如果您想坚持使用标准的 JPA 注释而不是使用特定于提供程序(Hibernate)的注释,这是不可能的。但是,通过将 TreeSet 与您自己的比较器一起使用,您可以实现相同的行为。

例如:

Set<User> roster = new TreeSet<User>(new MyComparator());

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2011-02-05
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多