2012-04-26 43 views
0

Im新的java和hibernate。Hibernate - 如何根據另一個對象的屬性來訂購結果

ExpenseType.java

public class ExpenseType extends BaseDomain { 
    private int companyId; 
    private String name; 
    private String description; 
    private Company company; 

    // Getters and Setters 
} 


Company.java

public class Company extends BaseDomain { 
    private String name; 
    private String address; 
    private String contactNumber; 
    private String emailAddress; 

    // Getters and Setters 
} 

我有2個ojects ExpenseType和公司。他們有many-to-one的關係。 映射在此文件expenseType.hbm.xml中。

expenseType.hbm.xml

<hibernate-mapping> 
    <class name="bp.ar.domain.hibernate.ExpenseType" table="EXPENSE_TYPE"> 
     . 
     . 
     <property name="companyId"> 
     <column name="COMPANY_ID"/> 
     </property> 

     <many-to-one name="company" class="bp.ar.domain.hibernate.Company" fetch="select" insert="false" update="false" lazy="false"> 
     <column name="COMPANY_ID" not-null="true" /> 
     </many-to-one> 
    </class> 
</hibernate-mapping> 

我在ExpenseType表COMPANY_ID外鍵。

在我的文件ExpenseTypeDaoImpl.java在執行我做這樣的事情

@Override 
public Collection<ExpenseType> getAll(int companyId, Collection<Company> companies, 
    ExpenseTypeField orderBy) { 
    DetachedCriteria dc = getDetachedCriteria(); 
    dc.addOrder(Order.asc("company")); 
    dc.addOrder(Order.asc(orderBy.name())); 
    return getAll(dc); 
} 

我真的希望發生的是,ExpenseType結果將根據公司的名稱進行排序。上面的代碼會發生什麼,它會根據COMPANY_ID訂購ExpenseType。我嘗試使用dc.addOrder(Order.asc("company.name"));,但出現錯誤。

我有這樣的錯誤:

org.hibernate.QueryException: could not resolve property: company.name of: bp.ar.domain.hibernate.ExpenseType

請幫助。提前致謝。

+0

發佈您收到的錯誤 – 2012-04-26 00:20:18

+0

@ kmb385我現在更新它。 – NinjaBoy 2012-04-26 00:22:50

+0

您不應該在ExpenseType中同時映射company和companyId。只需使用公司。 – MALfunction84 2012-04-26 00:27:09

回答

2

您需要先爲關係創建一個別名,然後才能對其屬性進行排序。這類似於SQL JOIN。

DetachedCriteria dc = getDetachedCriteria(); 
dc.createAlias("company", "company"); 
dc.addOrder(Order.asc("company.name")); 
return getAll(dc); 
+0

你是天才還是什麼?你救了我的命!!!非常感謝!!! – NinjaBoy 2012-04-26 00:27:04

+0

很高興幫忙,@NinjaBoy。不過,我認爲你提出了我的回答,而不是接受它。 – MALfunction84 2012-04-26 00:29:01

+0

我不知道你可以快速回答*。 :P – MALfunction84 2012-04-26 00:30:32

相關問題