2012-04-26 42 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

相关问题