2010-12-08 45 views
8

我们有以下JPA类:如何动态地对JPA中的集合属性进行排序?

@Entity 
class Supplier { 
    // ... id property etc. 

    @OneToMany 
    @OrderBy("someProperty") 
    private List<Region> regions; 
} 

这工作在正常情况下的罚款。但是,我们有一些多语言数据,其中值存储在属性中,如nameEn,nameDe,nameZh。要使用的确切属性取决于登录的用户。例如,讲德语的用户应该看到区域,就好像它已用@OrderBy("nameDe")进行了注释。

我该如何做到这一点?

我知道我可以在我的代码中加载后对其中的集合进行排序,但是这使得分页结果相当困难。

+2

因为你的持久化单元创建EntityManagerFactory的时候注释处理一次你不能嵌入在注释。你试图做的是类似于建立一个动态查询。 – 2010-12-08 17:39:35

回答

4

你可以用java对它们进行排序。可能在吸气:

List<Region> getRegions(){ 
    sorted = new List<Regions>(regions); 
    Collections.sort(sorted, new RegionComparator(getUserLanguage())); 
    return sorted; 
} 
+0

如果您的藏品中有1000件物品,并且您只想获得按物业排序的前10个物品,该怎么办?在dbms中这样做会更有效 – 2013-11-28 07:11:12

相关问题