使用具有3x +逻辑参数的动态查找器的Grails

Vic*_*tin 3 grails finder dynamic

我成功地使用Hibernate的动态查找器在数据库中搜索:

def temp = User.findByNameAndStreet("name", "street")
Run Code Online (Sandbox Code Playgroud)

虽然,我需要一个像这样的三个逻辑论证:

def temp = User.findByNameAndStreetAndCity("name", "street", "city")
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法吗?

Dón*_*nal 7

Grails动态查找器不支持两个以上的谓词.这是因为尚不清楚是否

User.findByNameAndAgeOrGender('foo', 12, 'm')
Run Code Online (Sandbox Code Playgroud)

意思是:

(name == 'foo' && age == 12) || gender == 'm'
Run Code Online (Sandbox Code Playgroud)

或这个:

name == 'foo' && (age == 12 || gender == 'm')
Run Code Online (Sandbox Code Playgroud)

不可否认,如果谓词总是与Andor 结合使用Or.


更新:因为Grails的1.4,你可以有谓词的数量不受限制,如果他们都用两种组合AndOr


相反,您可以使用findWherefindAllWhere(取决于您是只想要第一个结果还是所有结果).这两个都支持无限数量的谓词,我假设它们结合在一起And,例如:

User.findAllWhere(name: "foo", age: 12, gender: 'm')
Run Code Online (Sandbox Code Playgroud)

  • 当你需要超过2时,`findWhere`和`findAllWhere`或Criteria/HQL查询是要走的路.限制2的原因只是为了避免荒谬的长方法名称,但这个限制已经在1.4中删除了.为了避免混淆分辨率的顺序不能混用`和`/`或` - 他们必须都是`和`或`全部或`,但它足够简单,做一个真正的查询,如果你需要混合和` `和`或`. (4认同)