从我知道的文档中我们可以指定一个列,但是有没有办法传入自定义比较器并根据它进行排序?
所以它可能看起来像这样:
@OneToMany(cascade=CascadeType.ALL)
@OrderBy("createdDateTime", comparator=StripYearComparator.class)
public List<A> getAs() {
return result;
}
任何人都有与我相同的用例吗?
答案 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"/>