"in subselect"的休眠标准

Mar*_*arc 11 nhibernate hibernate criteria subquery

我正在尝试这样做,但使用Criteria而不是HQL:

select user from User where user in (
    select user from UserDomain where domain.id = "XXX"
)
Run Code Online (Sandbox Code Playgroud)

用户是与one-to-many联接表UserDomain 有关系的实体.这里的要点只是找到链接到Domainid ="XXX"的用户.

这看起来应该很简单......但到目前为止,我没有运气任何有用的文档.

Rad*_*ler 27

子查询非常有用,您需要搜索具有一对多 UserDomains的用户.在这种情况下,WHERE UserId IN (subquery)带来了很大的优势:我们仍在使用平面User表/实体......所以我们可以进行正确的分页.

这是文档15.8.分离的查询和子查询

草案可以是:子查询:

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") );
Run Code Online (Sandbox Code Playgroud)

主要问题是:

Criteria query = session.createCriteria(User.class, "u")
    .add( Subqueries.propertyIn("u.id", userSubquery) );
Run Code Online (Sandbox Code Playgroud)

现在我们有一个查询,可以用于分页


Mar*_*arc 3

我终于找到了。事实证明这毕竟不是那么难......一旦你知道了!

criteria = criteria.createCriteria(User.USER_DOMAINS).add(Restrictions.eq(UserDomain.DOMAIN, domain));
Run Code Online (Sandbox Code Playgroud)

是的,有,在 Javadoc 中就在我面前: http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/Criteria.html