テーブルの関係は次のとおりです。
- ID、ユーザー名、年齢の列を持つ users テーブル
- 列 ID、タイプ、番地を含む住所テーブル
- 列 ID、ユーザー ID、およびアドレス ID を含む user_address_associations テーブル。userid には users.identity との外部キー関係があり、addressid には addresses.identity との外部キー関係があります。
アドレス タイプが 1 に設定された 18 歳以上のすべてのユーザーを選択したいと思います。ユーザー エンティティとアドレス エンティティの Hibernate マッピングは存在しますが、ユーザーからアドレスへのマッピング内に関連付けが定義されていません。ユーザーとアドレスの間の唯一のリンクは、user_address_associations テーブルを介して指定されます。また、User クラスは Addresses プロパティを定義していません。
生の SQL は次のようになります。
select * from users
inner join user_address_associations
on user_address_associations.userid=users.identity
inner join addresses
on user_address_associations.addressid=addresses.identity and addresses.type=1
where db.users.age >= 18
Hibernate 3.6.5 Criteria API を使用して、次のことから始めました。
Criteria criteria = session.createCriteria(User.class);
// how to do the join to addresses table through user_address_associations table?
// where clause
criteria.add(Restrictions.gt("Age", 1176));
質問は、結合をどのように定式化するのですか?