2011-09-27 55 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