grails grom使用多对多映射创建标准

时间:2017-05-14 02:54:39

标签: grails gorm

我有两个域类:User和Book。

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")
}

请帮我正确过滤。

2 个答案:

答案 0 :(得分:1)

我不是100%确定您是如何尝试为您的域建模的,但也许您想要一本书只有一个用户?在这种情况下,您在Book上拥有belongsTo关系,例如

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

然后在User上有hasMany关系,例如

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

然后,您可以使用以下标准查找图书:

def user = User.findByName( 'bob' )

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

答案 1 :(得分:1)

您需要首先以多对多关系加入用户表。标准应如下:

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