web-dev-qa-db-ja.com

Hibernate Criteriaは3つのテーブルと結合します

フォローするための休止状態の基準を探しています:

Dokument.classはRole roleIdにマッピングされます

Role.classにはContactPersonのcontactIdがあります

Contact.class FirstName LastName

ContactクラスでFirstまたはLastNameを検索し、接続されているドキュメントのリストを取得したい。

私はこのようなことを試しました:

session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();

クラス「Dokument」のプロパティ「LastName」を解決できませんでしたエラーが表示されます

結合されたすべてのテーブルではなく、Dokumentで結合が検索される理由を誰かが説明できますか?すべての助けてくれてありがとう!

59
mahatmanich

フェッチモードは、関連付けをフェッチする必要があることのみを示します。関連するエンティティに制限を追加する場合は、エイリアスまたはサブ基準を作成する必要があります。私は一般的にエイリアスの使用を好みますが、YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument");
c.createAlias("dokument.role", "role"); // inner join by default
c.createAlias("role.contact", "contact");
c.add(Restrictions.eq("contact.lastName", "Test"));
return c.list();

もちろん、これは Hibernateリファレンスマニュアル で十分に説明されており、 Criteriaのjavadoc にも例があります。ドキュメントを読んでください:役に立つ情報がたくさんあります。

115
JB Nizet