私は 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 を使用しても可能であると考えました。
説明ありがとう