我正在尝试做这样的事情,但使用 Criteria
而不是 HQL
:
select user from User where user in (
select user from UserDomain where domain.id = "XXX"
)
用户是与连接表 UserDomain 具有一对多
关系的实体。
这里的要点只是找到链接到 id =“XXX”的域
的用户。
这看起来应该非常简单......但到目前为止我还没有找到任何有用的文档。
最佳答案
在您需要搜索具有一对多用户域的用户的情况下,子查询非常有用。在这种情况下,WHERE UserId IN(子查询)
带来了很大的优势:我们仍在使用平面 User
表/实体...因此我们可以进行正确的分页.
这是文档 15.8. Detached queries and subqueries
草案可能是:子查询:
DetachedCriteria userSubquery = DetachedCriteria.forClass(UserDomain.class, "ud")
// Filter the Subquery
.add(Restrictions.eq(UserDomain.DOMAIN, domain))
// SELECT The User Id
.setProjection( Projections.property("ud.userId") );
主要查询:
Criteria query = session.createCriteria(User.class, "u")
.add( Subqueries.propertyIn("u.id", userSubquery) );
现在我们有了一个查询,可以用于分页
关于 "in subselect"的 hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426734/