具有多对多映射的 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")
}
我有两个域类:用户和图书。
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")
}