0

私はJavaと休止状態が初めてです。

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
}

ExpenseType と Company の 2 つのオブジェクトがあります。彼らには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

助けてください。前もって感謝します。

4

1 に答える 1

2

プロパティで並べ替える前に、リレーションのエイリアスを作成する必要があります。これは SQL JOIN に似ています。

DetachedCriteria dc = getDetachedCriteria();
dc.createAlias("company", "company");
dc.addOrder(Order.asc("company.name"));
return getAll(dc);
于 2012-04-26T00:24:31.377 に答える