2012-04-03 60 views
0

试图想出一个简洁的方式来使用NOT IN子句创建命名查询。限制类似乎没有“不在”构造。任何人都知道这样做的好方法?针对NOT IN的Grails命名查询

解决方案

static namedQueries = { 
     activeOnly { 
      eq 'active', true 
     } 
     open { 
      ne 'state', this.STATE_COMPLETED 
     } 
     my { user -> 
      or { 
       eq 'createdBy', user 
       eq 'reviewer', user 
       eq 'assignee', user 
       eq 'requestedFor', user 
       ilike 'notifyList', "%$user%" 
      } 
     } 
     topLevel { 
      not {'in'('type', [RequestType.Part])} 
     } 
    } 

注意:单词“in'must被引用,因为它保留。

这些命名查询可以使用这样的:

Request.activeOnly.open.topLevel.list(params) 

回答

1

也许sombething这样的:

Book.findAll("from Book b where b.author not in (?)", ['Borges', 'Sabato', 'Cortazar']) 

或使用标准

http://grails.org/doc/1.3.x/ref/Domain%20Classes/createCriteria.html - 在文档中的“ '标准方法也有一个链接'不'的方法。

+0

谢谢你的回复。这可能工作,但不是一个命名查询。命名查询使用标准API来创建和缓存预准备语句。 – dbrin 2012-04-03 23:23:46

+0

添加标准dsl。 – pablomolnar 2012-04-03 23:41:16

+0

谢谢你的时间。更正了语法。 inList是为约束保留的,但引用的'in'起作用。 – dbrin 2012-04-03 23:57:12