Search code examples
javahibernatehqlhibernate-criteria

Criteria throws org.hibernate.QueryException: could not resolve property but HQL works


I am trying to retrieve CompanyOnCampus entity using criteria. It has a component class Company. The mapping is like this:

<class name="entities.pp.Company" table="ie_company_info">
    <id column="company_id" name="id"/>
    <property column="company_name" name="name" type="string"/>
    <property column="company_short_name" name="shortName" type="string"/>
    <property column="company_description" name="description"    type="string"/>
</class>

<class name="entities.pp.CompanyOnCampus" table="c2ie_companies">
    <id column="c2ie_companie_id" name="id"/>
    <many-to-one column="c2ie_company_id" name="company"/>
    <many-to-one column="c2ie_institute_id" name="institute"/>
</class>

The criteria:

Criteria criteria = session.createCriteria(CompanyOnCampus.class);
criteria.add(Restrictions.eq("institute.instituteId", pUser.getInstituteInfo().getInstituteId()))
.add(Property.forName("company").getProperty("name").like(pSearchString+"%"));

OR

Criteria criteria = session.createCriteria(CompanyOnCampus.class);
criteria.add(Restrictions.eq("institute.instituteId", pUser.getInstituteInfo().getInstituteId()))
.add(Restrictions.ilike("company.name",pSearchString+"%"));  

The result here is that I get the exception

org.hibernate.QueryException: could not resolve property company.name for class entities.pp.CompanyOnCampus ...

Now I try the same with HQL:

String q = "FROM CompanyOnCampus company WHERE company.company.name LIKE :name AND company.institute.instituteId = :instiId";
Query hql = session.createQuery(q);
hql.setParameter("name", pSearchString+"%");
hql.setParameter("instiId", pUser.getInstituteInfo().getInstituteId());
List<CompanyOnCampus> companies = hql.list();

Here I get the result.


Solution

  • Creating alias of company will resolve the issue.

    Criteria criteria = session.createCriteria(CompanyOnCampus.class);
    criteria.createAlias("company","company");