2015-10-15 188 views
3

我有一個簡單的Grails應用程序。我有域如下Grails域名字符串查詢查詢

class Author implements Serializable { 
    .... 
    static hasMany = [ 
     book : Book 
    ] 
} 

class Book implements Serializable{ 

    Author author 
    Genres genres 
    static belongsTo = [author: Author , genre: Genres ] 
    static mapping = { 
    ..... 
     author lazy: false 
    } 
} 

class Genres implements Serializable{ 

    String title 

} 

現在我有一個要求,在那裏我有流派標題的列表,我需要檢索所有誰擁有這些類型之一ATLEAST一種書的作者。我需要在Author類中編寫一個命名查詢。我想下面的查詢

hasGenre {cl -> 
    'book.genre.title' in cl 
} 

我傳遞字符串列表如下

Author.hasGenre(genereTitleStringArray) 

但這似乎並不奏效。我有一些其他簡單的命名查詢工作正常。所以當我檢索包括「hasGenere」時,這似乎不會影響檢索。我究竟做錯了什麼?我是很新的這方面提前

回答

1

您一直在使用列表()方法?如果沒有,你必須用它來得到你的namedQuery實體,因爲namedQuery返回NamedCriteriaProxy.Class

author = Author.hasGenre(genereTitleStringArray).list() 

對我來說,這樣的代碼工作不錯,在我的作者我有:

static namedQueries = { 
    hasGenre { cl-> 
     'book.genres.title' in cl 
    } 
} 

預訂相同。什麼流派,你還必須添加依賴一對一的(如果你還沒有):

static belongsTo = [book: Book] 

或一對多:

static hasMany= [book: Book] 

對於我目前的代碼工作好,運氣好。

P.S. 我使用Grails 2.3.11

+0

本書通過懶惰單端關聯與Generes關聯。這是因爲我不想在檢索Genere對象時檢索書籍。我正在使用Grails 2.2.4。如果我使用查詢'Author.hasGenre(genereTitleStringArray).list()',則檢索所有記錄。 hasGenre方法似乎不會影響檢索 – Visahan

+0

我剛剛意識到我已在作者中將定義的標籤定義爲'Set book',將其更改爲'Set book'並且它正在工作。感謝您的幫助 – Visahan

+0

很高興聽到,祝你好運兄弟) –

0

得益於正確的語法將

static namedQueries = { 
     hasGenre {genreName -> 
       book{ 
        genres { 
         eq 'title' genreName 
       } 
      } 
     } 
    } 
+0

我曾嘗試使用此語法,它沒有工作 – Visahan

+0

,這包括在作者的域名? – Neoryder

+0

是的,在作者域名下,靜態namedQueries = { – Visahan