2017-05-14 11 views
0

私は2つのドメインクラスUserとBookを持っています。grails grom多対多マッピングの条件を作成します。

class Book implements Serializable{ 


    String bookName 
    Timestamp createdDateTime 

    Blob file 


    static belongsTo = [User] 
    static hasMany = [user :User] 
} 

私はaddToUser()メソッドを使用して、本の中でユーザーを追加することができています。

しかし、ユーザーにフィルタを適用している間に基準を作成することに固執しています。

def query = Book.createCriteria(); 

def results = query.list() { 
    eq("user",userObject) // not working since user field is a list of users. 
    order("createdDateTime", "desc") 
} 

フィルタリングの正しい方法をお手伝いください。

答えて

1

class User { 
    String name 
    static hasMany = [books: Book] 
} 

次に、あなたのような基準をアップブックを見ることができます。条件は次のようになります。

Book.withCriteria { 
    user { 
     eq("id", userObject.id) 
    } 
    order("createdDateTime", "desc") 
} 
1

あなたのドメインをモデル化しようとしているのは100%ではありませんが、書籍を1人のユーザーにしたいと思っていますか?この場合、あなたはbooksのbelongsTo関係を持っています。

class Book { 
    String bookName 
    Timestamp createdDateTime 
    Blob file 
    static belongsTo = [user: User] 
} 

次に、ユーザーにhasMany関係を設定します。あなたは、多対多の関係で最初のユーザーテーブルに参加する必要があり

def user = User.findByName('bob') 

def results = Book.createCriteria().list() { 
    eq("user", user) 
    order("createdDateTime", "desc") 
} 
+0

ユーザフィールドはユーザオブジェクトのリストなので、その基準は動作しません。 –

+0

私の答えでは、リストには改造されていないので、ブックには1人のユーザーしかいないが、ユーザーには多数の書籍がある –