Как получить доступ к Object.field в критериях в Hibernate - PullRequest
0 голосов
/ 15 января 2012

Я написал критерии для класса компании.ниже приведены класс компании, класс компании и критерии поиска.Но список критериев - исключение броска.исключение: «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;
}
...
}

CompanySearch

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;

1 Ответ

3 голосов
/ 15 января 2012

Вы должны создать соединение с сущностью 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 Spring, как это сделать, неудивительно, что вы ничего не нашли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...