如何只获取在 grails 中设置了一些值但不是列表的字符串的一个值?

How to get only one value of a String that have set some values in grails and is not a list?

我的数据库中有一列具有此值 "Bob;Steve;Fred"。此列是一个字符串(不是列表),我希望能够构建一个查询,为我提供通过参数传递的值。

这是我的域名:

String name (values that contain name is: Bob;Steve;Fred)

我想做的是构建一个查询,只获取我在方法中传递的名称:

这是我的方法,我正在尝试这样做:

def updateName(String myName) {
    MyDomain md = MyDomain.findByName(myName)
    if (!md) {
       log.warn "name not found [" + name+ "]"
    }

}

有了这个,我总是md = null

我想要的是,比如说。如果我传递 myName=Bob,我想要的是在我的字符串名称中找到具有三个名称的 Bob (Bob;Steve;Fred):

 MyDomain md = MyDomain.findByName(Bob)
 md should be = Bob

提前致谢

这些默认函数如 findBySomething() 仅适用于精确值。因为它们被转换为 Hibernate 查询,并且在查询中它检查对象的值是否等于传递的值。
但是 Grails 有一个叫做 criteria 的东西,如果我理解正确(你想要包含你传递的字符串的域值),你应该这样做:

def results = MyDomain.createCriteria().list{
    ilike("name", "%"+myName+"%")
}


还有
我不明白你想要实现什么,但这个结构看起来不太好(将可能的值存储在这样的字符串中)

简介
尽管现有问题只有一个答案,正如@tim_yates 指出的那样,使用我的答案以及您设置域的方法 class 并不是最好的

如何在域中设置列表
Grails 域 classes 有 hasMany selector,因此您的域 class 应该如下所示:

class MyDomain {
    static hasMany = [names: String]
    List names
}

如何添加名字
当拥有域对象并想向列表中添加另一个名称时,可以使用 myDomainObject.addToNames(thename)

如何按名称检索
正如我之前所说,这需要 createCriteria() :

def results = MyDomain.createCriteria().list{
    "in"("names",someName)
}

这将 return 所有域对象的列表。如果你想从他们那里得到一些数据,你可以使用 each 循环并使用 it 引用一个项目:

results.each{
    println it.names
}

您也可以尝试这样做:

MyDomain md = MyDomain.findByName("%" + myName + "%")

查看文档:https://grails.github.io/grails-doc/2.4.4/ref/Domain%20Classes/findBy.html