簡體   English   中英

如何在Hibernate中的條件中訪問Object.field

[英]How to access Object.field in criteria in Hibernate

我已經寫了公司課程的標准。 以下是公司類別,companySearch類別和條件。 但是條件列表是拋出異常。 例外是“ org.hibernate.QueryException:無法解析屬性:com.sesami.common.domain.Company的san.san”。 如何訪問Company.san.san?

公司類

public class Company extends DomainObject implements UserDetails {
private Long id;
private String companyName;
private CompanyType companyType;
private String description;
private String companyURL;
private String billToEmail;
private String hashPassword;
private SAN san;

@OneToOne(cascade = { CascadeType.ALL })
public SAN getSan() {
    return san;
}

public void setSan(SAN san) {
    this.san = san;
}
...
}

公司搜索

public class CompanySearch {
private String companyName;
private String email;
private Long san;
private String gstNumber;
......
public Long getSan() {
    return san;
}

public void setSan(Long san) {
    this.san = san;
}
...
}

標准

companyCriteria = this.getSession().createCriteria(
            Company.class);

    if (companySearch.getSan() != null
            && !"".equals(companySearch.getSan()))
        companyCriteria.add(Restrictions.eq("san.san",
                companySearch.getSan()));

    Integer count = ((Long) companyCriteria.setProjection(
            Projections.rowCount()).uniqueResult()).intValue();
    companyCriteria.setProjection(null);
    companyCriteria.setResultTransformer(Criteria.ROOT_ENTITY);
    companyCriteria
            .setFirstResult((pager.getPage() - 1) * pager.getPageSize())
            .setMaxResults(pager.getPageSize()).list();
    List<Company> companies = companyCriteria.list();

    PagedResultSet pr = new PagedResultSet();
    pr.setPager(pager);
    pr.setResultSet(companies);
    pr.setRowCount(count);
    return pr;

您必須使用子條件或別名創建San實體的聯接:

companyCriteria.createAlias("san", "sanAlias"); 
companyCriteria.add(Restrictions.eq("sanAlias.san",
                    companySearch.getSan()));

要么

companyCriteria.createCriteria("san").add(Restrictions.eq("san",
                                          companySearch.getSan()));

Hibernate參考文檔甚至Criteria javadoc中對此都有很好的解釋。

請注意,這與Spring完全無關,與Hibernate無關。 如果您在Spring文檔中搜索了如何執行此操作,那也就不足為奇了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM