Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何在Grails中创建此基于条件/分离条件的查询_Hibernate_Grails_Hibernate Criteria_Detachedcriteria - Fatal编程技术网

Hibernate 如何在Grails中创建此基于条件/分离条件的查询

Hibernate 如何在Grails中创建此基于条件/分离条件的查询,hibernate,grails,hibernate-criteria,detachedcriteria,Hibernate,Grails,Hibernate Criteria,Detachedcriteria,我试图在Grails中完成一个条件查询,该查询有时必须引用一个未关联的表,因此使用分离查询。根据传入的参数,我需要执行不同的子查询 我有一个客户域,这是我创建标准的基础,因为有选项可用于查询客户字段、名称等 用户应该可以通过客户订单的状态查询客户,这就是我的问题开始的地方。客户和订单之间没有hasMany,但有一个联接表,可以使用分离查询来查询 因此,还有一个Order和一个CustomerOrder联接表 订单表有一个状态字段,该字段可以包含可能值为null、OPEN或CLOSED的枚举 我想

我试图在Grails中完成一个条件查询,该查询有时必须引用一个未关联的表,因此使用分离查询。根据传入的参数,我需要执行不同的子查询

我有一个客户域,这是我创建标准的基础,因为有选项可用于查询客户字段、名称等

用户应该可以通过客户订单的状态查询客户,这就是我的问题开始的地方。客户和订单之间没有hasMany,但有一个联接表,可以使用分离查询来查询

因此,还有一个Order和一个CustomerOrder联接表

订单表有一个状态字段,该字段可以包含可能值为null、OPEN或CLOSED的枚举

我想让用户能够(通过选择菜单)选择“无订单”、“未结订单”、“已结订单”和“未结或已结订单”的订单状态选项

事实证明,将这一点转化为独立的标准是很棘手的,如果有人能帮忙的话,那就太好了

首先,我有。。。但它并不完整,我认为我在if块上的方向不对

def results = Customer.createCriteria().list {

  /* other restrictions omitted */

  // now the order status test
  if (params.orderStatus) {
    if (params.orderStatus == 'NO_ORDERS') {

    } else if (params.orderStatus == 'CLOSED_ORDERS') {
    } else if (params.orderStatus == 'OPEN_ORDERS') {
    } else if (params.orderStatus == 'OPENORCLOSED_ORDERS') {
      def sub = DetachedCriteria.forClass(CustomerOrder.class, 'co').with {
        and {
          order {
            eq('status', params.orderStatus)
          }
          client {
            add(Restrictions.eqProperty('this.id', 'id'))
          }
        }
        //setProjection(Property.forName('id'))
      }
      add(Subqueries.propertyIn('id', sub))
    }
  }
}

这通常是我求助于HQL的时候,因为在这种情况下,HQL对我来说更有意义。它支持连接没有定义GORM查询方法关系的对象(其中查询、条件查询和HQL)依赖域类关联来连接数据库表。据我所知,您有两个域类:
Customer
Order
。和一个没有域类的表:
CustomerOrder
。这是正确的吗?@EmmanuelRosa你的第一句话不正确。请参阅我上面的评论您是否有一个没有关联的连接的HQL示例?