具有composite-id的Hibernate Criteria无法解析属性

时间:2015-06-08 15:10:23

标签: java hibernate properties criteria composite-id

我正在使用Hibernate 4.3.2.Final,在mapping.xml中,我有一个像这样的复合ID:

<class name="OrganisationSpecialist" table="organisation_specialist">
    <composite-id mapped="false" unsaved-value="undefined">
        <key-many-to-one class="Organisation" column="ORGANISATION_ID" lazy="false" name="organisation" />
        <key-many-to-one class="Specialist" column="SPECIALIST_ID" lazy="false" name="specialist" />
    </composite-id>
</class>

以下代码可以使用

Criteria criteria = session.createCriteria(OrganisationSpecialist.class);
    criteria.add(Restrictions.eq("organisation.organisationId", organisationId));

当我添加一个声明,其中包含我的模型组织中存在的属性,如下所示:

Criteria criteria = session.createCriteria(OrganisationSpecialist.class);
    criteria.add(Restrictions.eq("organisation.organisationId", organisationId));
    criteria.add(Restrictions.eq("organisation.deleted", true));

我收到错误消息:

org.hibernate.QueryException: could not resolve property: organisation.deleted of: ch.xxx.yyy.model.OrganisationSpecialist

我还尝试使用别名删除属性,如下所示:

Criteria criteria = session.createCriteria(OrganisationSpecialist.class);
    criteria.add(Restrictions.eq("organisation.organisationId", organisationId));
    criteria.createAlias("organisation", "o").add(Restrictions.eq("o.deleted", false));
    criteria.add(Restrictions.eq("organisation.deleted", true));

当我使用HQL查询时,我的查询有效。

Query query = session.createQuery("from OrganisationSpecialist where organisation.organisationId=:orgId and organisation.deleted=false");
    query.setParameter("orgId", organisationId);

有人可以解释一下我做错了什么吗?我认为使用Criteria也可以在HQL中进行每个查询。

感谢您的解释

0 个答案:

没有答案