【问题标题】:Hibernate subquery detachedCriteriaHibernate 子查询 detachedCriteria
【发布时间】:2012-10-25 19:00:14
【问题描述】:

如何在具有多个子查询的休眠中编写子查询。例如

select * from project_dtls where project_id in  
  (select project_id from project_users where user_id =
  (select user_id from user_dtls where email='abc@email.com'))

我知道我们可以通过 DetachedCriteria 编写,但找不到任何可以使用多个子查询的示例。

【问题讨论】:

    标签: hibernate subquery detachedcriteria


    【解决方案1】:

    这是一个例子:

    DetachedCriteria exampleSubquery = DetachedCriteria.forClass(MyPersistedObject.class)
        .setProjection(Property.forName("id"))
        // plus any other criteria...
        ;
    
    Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class)
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
        .add(Subqueries.propertyIn("myPersistedObjectId", exampleSubquery)));
    

    对于多个子查询,您可以使用布尔运算符,例如 Restrictions.or():

    DetachedCriteria anotherSubquery = DetachedCriteria.forClass(MyPersistedObject.class)
        .setProjection(Property.forName("id"))
        // plus any other criteria...
        ;
    
    Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class)
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
        .add(Restrictions.or(
            Subqueries.propertyIn("myPersistedObjectId", exampleSubquery),
            Subqueries.propertyIn("myPersistedObjectId", anotherSubquery)));
    

    【讨论】:

    • 听起来好像没用。如果您可以提供更多详细信息,也许是您尝试过的代码,也许我们可以提供更多帮助。
    • 好吧,您的示例实际上并没有复制他的代码。他在子查询中有一个子查询,但你的只是一个 OR。
    • 这个问题询问如何使用 DetachedCriteria。您的答案显示了如何使用标准来做到这一点。这是不同的,并不能完全回答问题。
    【解决方案2】:

    完全使用分离标准(因为我喜欢在没有会话的情况下构建分离标准)

    DetachedCriteria idQuery = DetachedCriteria.forClass(MyPersistedObject.class)
        .setProjection(Property.forName("id"))
    DetachedCriteria recordQuery = DetachedCriteria.forClass(MyPersistedObject.class)
        .add(Property.forName("id").eq(idQuery) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多