具有多个左内连接的hibernate准则API

时间:2013-01-02 16:25:34

标签: hibernate inner-join criteria-api

表关系如下:

  • 包含列标识,用户名,年龄
  • 的用户表
  • 包含列标识,类型,街道
  • 的地址表
  • 具有列标识,userid和addressid的user_address_associations表。 userid与users.identity和addressid具有外键关系到address.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));

问题是,我如何制定联接?

1 个答案:

答案 0 :(得分:2)

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