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

grails grom使用多对多映射创建标准,grails,gorm,Grails,Gorm,我有两个域类:User和Book class Book implements Serializable{ String bookName Timestamp createdDateTime Blob file static belongsTo = [User] static hasMany = [user :User] } 我可以使用addToUser()方法在书中添加用户 但在用户中应用过滤器时,我陷入了创建条件的困境 def query

我有两个域类: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")
}

请帮助我找到正确的筛选方法。

我不确定您是如何尝试对域进行建模的,但您可能希望一本书只有一个用户?在这种情况下,你将拥有书上的belongsTo关系

class Book {
    String bookName
    Timestamp createdDateTime
    Blob file
    static belongsTo = [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" )
}

我不是100%确定你是如何尝试建模你的领域,但也许你想一本书有一个单一的用户?在这种情况下,你将拥有书上的belongsTo关系

class Book {
    String bookName
    Timestamp createdDateTime
    Blob file
    static belongsTo = [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" )
}

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

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

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

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

它不起作用,因为用户字段是用户对象的列表。在我的回答中,它不是列表,因为它已被重新建模,因此一本书只有一个用户,但一个用户可以有多本书。它不起作用,因为用户字段是一个用户对象列表。在我的回答中,它不是一个列表,因为它已被重新建模,所以一本书只有一个用户,但一个用户可以有多本书