"in subselect"的 hibernate 标准

标签 hibernate nhibernate subquery criteria

我正在尝试做这样的事情,但使用 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/

相关文章:

nhibernate - 任何 Rhino Commons 入门教程?

sql - 如何将子查询where条件移出子查询?

java - 使用 Java 和 Hibernate 从存储过程获取返回值(标量),而不是结果表

java - 我无法让级联在实体 Hibernate 上工作

Nhibernate: QuerySyntaxException: 'Class' 未映射

c# - 查询 HasMany 引用

java - 将 EntityManager Autowiring 到服务中时出现 FactoryBeanNotInitializedException

mysql - Hibernate 会自动创建索引吗?

mysql - SQL 查询结果如何用于另一个查询的 LIKE 条件?

postgresql - 是否缓存了 PostgreSQL 子查询/CTE?