Grails GORM准则生成器sqlRestriction CONTAINS子句

Grails GORM准则生成器sqlRestriction CONTAINS子句,grails,gorm,contains,Grails,Gorm,Contains,我正在尝试使用GORM CriteriaBuilder对字段名使用CONTAINS子句对SQL Server数据库进行全文搜索。我正在尝试使用sqlRestriction方法来实现这一点。此外,CriteriaBuilder可能包含许多其他可选标准 比如: Table.createCriteria.list { and { if (option1) { eq "field1", option1 } if (option2) { like "field2", opt

我正在尝试使用GORM CriteriaBuilder对字段名使用CONTAINS子句对SQL Server数据库进行全文搜索。我正在尝试使用sqlRestriction方法来实现这一点。此外,CriteriaBuilder可能包含许多其他可选标准

比如:

Table.createCriteria.list {
    and {
      if (option1) { eq "field1", option1 }
      if (option2) { like "field2", option2 }
      if (option3) { sqlRestriction "CONTAINS(field3, '${option3}')" }
    }
}
选项3可以包含布尔运算符

有人在这方面取得了成功吗

单元测试在sqlRestriction行上引发异常: groovy.lang.MissingMethodException:没有方法的签名:grails.gorm.CriteriaBuilder.sqlRestriction()适用于参数类型:(java.lang.String)

我认为字符串类型正是sqlRestriction所寻找的

对其他选择持开放态度。提前谢谢


使用Grails2.0.3。

根据文档,一切看起来都正常-字符串似乎就是它所期望的。快速提问:field3是数据库列的实际名称,而不是域元素吗?使用sqlRestriction,“field3”应该是db字段名,而不是域属性名。经过进一步开发,结果表明,当作为web应用程序运行时,代码可以按预期工作。但是,单元测试和集成测试都不能使用sqlRestriction中的“CONTAINS”。我不希望单元测试工作,因为'CONTAINS'子句是特定于SQL Server的。但是,我希望它能在集成测试中起作用。很高兴知道——就“field3”是db字段名而言,这就是我想说的:这应该是字段名,而不是域属性名。你需要使用plasticCriteria插件。根据文档,一切看起来都正常——字符串似乎就是它所期望的。快速提问:field3是数据库列的实际名称,而不是域元素吗?使用sqlRestriction,“field3”应该是db字段名,而不是域属性名。经过进一步开发,结果表明,当作为web应用程序运行时,代码可以按预期工作。但是,单元测试和集成测试都不能使用sqlRestriction中的“CONTAINS”。我不希望单元测试工作,因为'CONTAINS'子句是特定于SQL Server的。但是,我希望它能在集成测试中起作用。很高兴知道-就'field3'是db字段名而言,这正是我想说的:这应该是字段名,而不是域属性名。你需要使用plasticCriteria插件