如何在Grails

时间:2015-12-09 16:13:56

标签: hibernate grails hibernate-criteria detachedcriteria

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

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

用户应该可以通过客户订单的状态查询客户,这是我的麻烦开始的地方。客户和订单之间没有任何东西,但有一个可以使用分离查询查询的连接表。

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

Order表有一个状态字段,可以包含一个Enum,其值可能为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))
    }
  }
}

0 个答案:

没有答案