表关系如下:
- 包含身份、用户名、年龄列的用户表
- 具有标识、类型、街道列的地址表
- 一个 user_address_associations 表,其中包含 identity、userid 和 addressid 列。userid 与 users.identity 有外键关系,addressid 与addresses.identity 有外键关系。
我想选择所有 18 岁以上且地址类型设置为 1 的用户。存在用户和地址实体的休眠映射,但在从用户到地址的映射中没有定义关联。用户和地址之间的唯一链接是通过 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));
问题是,我如何形成连接?