2016-04-26 31 views
0

我的數據庫中有一列有這個值「Bob; Steve; Fred」。這個列是一個字符串(不是一個列表),我希望能夠建立一個查詢,給我的價值,我通過參數。如何獲得在Grails中設置了一些值並且不是列表的字符串的唯一值?

這是我的域名:

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 =鮑勃,我想的是找到鮑勃在有三個名字(鮑勃;史蒂夫;弗雷德)我的字符串名稱:提前

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

感謝

+0

我不完全理解的問題,但它應該是'findByName',不'findByname' –

+0

也。這個_String名稱(包含名字的值是:Bob; Steve; Fred)_是什麼意思?給出傳遞的值和域值的確切示例以及您想要實現的內容 –

+0

Hi @Mikelis。我已更新我的問題。請看一下。但是,基本上我想要的是獲取我在arg中傳遞的名稱,與數據庫中的字符串存儲匹配並返回值 –

回答

0

INTRO
雖然對於存在的問題一個答案,因爲@tim_yates指出,還有用我的回答,以及你的設置域類的方法可能存在的問題是不是最好的

如何設置列表域
Grails領域類有hasMany selector,所以你的域類應該是這樣的:

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

如何添加一個名字
有一個域對象時,並希望到另一個名稱添加到列表中,你可以使用myDomainObject.addToNames(thename)

如何通過名稱
正如我前面所說的檢索,這需要個createCriteria():

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

這將返回所有域對象的列表。如果你想從他們那裏得到一些數據,可以通過循環使用each並指一個項目使用it

results.each{ 
    println it.names 
} 
1

這些默認功能,如findBySomething()工作只確切的值。因爲它們被轉換爲Hibernate查詢,並且在查詢中它檢查的是object的值等於傳遞的值。
Grails中有一個名爲criteria的事情,如果我理解正確的話(要包含你傳遞的字符串域值),你應該是這樣的:

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


ALSO
我沒有得到你想要達到的目標,但是這種結構看起來並不好(要將可能的值存儲在字符串中)

+0

感謝Mikelis,對不起,我認爲這可以工作,但是我得到結果中的一個對象不像名稱,就像我試圖匹配的字符串 –

+1

上面也會發現誤報,其中'name ='timus; kate; bobina'' –

+0

@tim_yates我也有過這種想法。 –

相關問題