2011-09-27 34 views
0

是否可以查询基类的实体,但是按子类的属性排序?JPA /子类的休眠顺序属性

例如,(省略JPA注释)

class Base 
{ 
    int base; 
} 

class SubA extends Base 
{ 
    int subA; 
} 

class SubB extends Base 
{ 
    int subB; 
} 

和假设数据库包含了所有3类的实例。

我想检索所有基本实例,多态,按子类的属性排序。如果该属性不存在,则假定它为空。 (想象一下,所有这些情况都显示在一个表中,所有的属性,并允许用户进行排序的任何属性。)

我希望这样的事情:

select b from Base b order by b.subA 

但显然苏巴属性不被识别。

是否有某种方法来尝试转换,以便可以使用subA属性?

回答

1

对不起,这是不可能的。

但是你可以使用这样的事情:

TypedQuery<Base> baseQ = em.createQuery("SELECT b FROM Base b", Base.class); 
List<Base> resultList = baseQ.getResultList(); 
Collections.sort(resultList, new Comparator<Base>() { 
    @Override 
    public int compare(Base b1, Base b2) { 
     ... 
    } 
}); 
+0

感谢您的答复。我希望不必在db外进行排序,因为这涉及到获取所有实例。该应用程序使用分页视图,因此目前只提取相对较少的实例。 – mdma