1

表关系如下:

  • 包含身份、用户名、年龄列的用户表
  • 具有标识、类型、街道列的地址表
  • 一个 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));

问题是,我如何形成连接?

4

1 回答 1

2

不可能。Hibernate 查询(HQL 或 Criteria)仅使用实体、它们的持久字段和它们的关联。如果连接表未映射并且未用于定义用户和地址实体之间的关联,则您将无法使用 Hibernate 使用此表定义查询,当然 SQL 查询除外。

于 2013-01-02T18:56:24.763 回答