gpt4 book ai didi

java - Hibernate - 如何根据另一个对象的属性对结果进行排序

转载 作者:行者123 更新时间:2023-12-02 07:50:07 25 4
gpt4 key购买 nike

我是 java 和 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 个对象 ExpenseType 和 Company。它们具有多对一关系。这映射位于此文件 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:无法解析属性:company.name of:bp.ar.domain.hibernate.ExpenseType

请帮忙。提前致谢。

最佳答案

您需要先创建关系的别名,然后才能对其属性进行排序。这类似于 SQL JOIN。

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

关于java - Hibernate - 如何根据另一个对象的属性对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10325620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com