質問

会社のクラスの基準を書きました。以下は、会社のクラス、会社のクラス、および基準です。ただし、基準リストはスロー例外です。例外は「org.hibernate.queryexception:プロパティを解決できませんでした:san.san of:com.sesami.common.domain.company」です。 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;
役に立ちましたか?

解決

You must create a join to the San entity, using a subcriteria, or an alias:

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

or

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

This is well explained in the Hibernate reference documentation and even in the Criteria javadoc.

Note that this has absolutely nothing to do with Spring, and everything to do with Hibernate. If you searched in the Spring doc for how to do this, no wonder you didn't find anything.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top