有没有办法在使用javax.persistence.OrderBy注释时通过策略定义自定义顺序?

时间:2011-10-18 22:51:46

标签: java persistence sql-order-by

从我知道的文档中我们可以指定一个列,但是有没有办法传入自定义比较器并根据它进行排序?

所以它可能看起来像这样:

@OneToMany(cascade=CascadeType.ALL)
@OrderBy("createdDateTime", comparator=StripYearComparator.class)
public List<A> getAs() {
    return result;
}

任何人都有与我相同的用例吗?

2 个答案:

答案 0 :(得分:0)

我不知道@Tommy。 @OrderBy的重点是定义数据库(或其他数据存储区)的排序方式。它转换为SQL查询(或其他一些请求),如下所示。

SELECT * FROM `foo` WHERE `id` = ? ORDER BY `val`

数据检索,然后由驱动程序或其他实体在客户端上排序,因此无法注入您自己的比较器。

如果您需要另一种排序策略,那么我担心您必须将这些项目检索到您的代码中并自行排序。

答案 1 :(得分:0)

@Gray感谢您的建议,我用不同的方法解决了问题,并认为我可能会分享它。

我们正在使用JSF和Richfaces 3.1.6GA。最初我希望JPA层返回已经订购的列表,以便输入Richfaces。我们发现在Richfaces 3.2及更高版本中,sortBy的功能被烘焙到标签中。您只需要指定的方法就是要排序的方法。所以我的解决方案是升级到更新版本的Richfaces并在我的实体类中添加以下方法。

所以在我的Person类中,

我有一个方法getNamesWithoutCommas()顾名思义得到没有逗号的名称,然后用它来排序。

在宣布我的专栏时,我有类似的内容:

<rich: column sortBy="person.namesWithoutCommas"/>