我正在尝试查询看起来像这样的域:
class MyDomain {
String something
String somethingElse
Set someStrings
static hasMany = [someStrings: String]
static mapping = {
//... etc.
someStrings: cascade: 'all'
//... etc.
}
}
域是在我没有写的依赖项中,无法修改。
我想找到所有的mydomains,在其中包含" xyz'"。
请向我展示如何通过标准或您认为最佳实践的任何方式动态地向我展示,我可以在圣杯中做到这一点。我的项目和依赖性使用Grails 2.44。
在我看来,使用藏品作为Grails域中的财产已经是一个反模式,因此在其中要求"最佳实践",这是具有讽刺意味的。<<<<<<<<<<<<<<<<<</p>
fwiw,这是我的尝试。
Grails为您的一组字符串构建了一张表格,因此您可以使用经典的SQL查询,并将结果绑定到域类,例如:
import myapp.MyDomain
class MyDomainService {
List<MyDomain> findByKeyword(String keyword) {
MyDomain.withSession {session ->
def query = session.createSQLQuery("select distinct main.* from MY_DOMAIN as main inner join MY_DOMAIN_SOME_STRINGS as detail on main.id=detail.MY_DOMAIN_ID where detail.SOME_STRINGS_STRING = :keyword")
query.addEntity(MyDomain.class)
query.setString("keyword", keyword)
query.list()
}
}
}
我无法测试代码,因此可能会有错别字。我相信我的桌子和列名称与您的示例生成的礼物匹配。在任何情况下
更新:不确定它是否会起作用,但是您可以尝试以下操作:
MyDomain.findAll {
someStrings.contains "xyz"
}
从理论上可以在查询的DSL中进行,但我没有尝试过。如果他们考虑到这一点,我会留下深刻的印象。