具有多对多映射的 grails gorm createcriteria

grails grom create criteria with many-to-many mapping

我有两个域类:用户和图书。

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

请帮我看看正确的过滤方式。

我不是 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" )
}

您需要首先在多对多关系中加入用户 table。条件应如下所示:

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