2012-10-15 52 views
0

我想對Hibernate數據集進行排序,按照(可選)關聯對象的屬性進行排序。我遵循hibernate order by association的例子 - 這在某種程度上是有效的。問題出現在沒有關聯的對象時,整個記錄被忽略。休眠根據關聯(可選)字段排序

如果我將對象的關聯類型更改爲外部聯接,它會有幫助嗎?如果是這樣,有人可以請我指出正確的指示嗎?

非常感謝。

回答

1

引用的問題使用了Criteria查詢,所以我不確定您是否需要這些答案或者您是否只需要HQL。假設HQL是OK,如果你有這樣的實體:

class EntityA { 
    private Long id; 
    @OneToMany 
    private EntityB b; 

    .... 
} 

class EntityB { 
    private Long id; 
    private String name; 
} 

如果你有EntityA和EntityB之間的可選的一對多關係,那麼你應該能夠使用的查詢是這樣的:

"SELECT obj FROM " + EntityA.class.getName() + " obj LEFT JOIN obj.b obj2 ORDER BY obj2.name"; 

您將在哪裏選擇所有EntityA加入EntityB它存在的位置,按EntityB.name字段排序。

+0

THX您的時間,但我試圖避免HQL,因爲對象是非常複雜的,有很多加入的,所以我沒有看到重新實現所有這些連接點個別。 – readikus

1

我設法解決了只有一行代碼更改的問題。在構建Criteria對象時,我能夠傳遞參數JoinFragment.LEFT_OUTER_JOIN。例如:

Criteria subCriteria = criteria.createCriteria(subTypeName, JoinFragment.LEFT_OUTER_JOIN);