1

我正在使用 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);

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

感谢您的解释

4

0 回答 0