我试图在Grails中撤回一个复合对象。
我有一个User类,看起来像这样。
public class User {
String email
String firstName
String lastName
String password
SortedSet tasks
static hasMany = [tasks: Task]
static constraints = {
email (blank: false, email:true)
firstName (blank: false)
lastName (blank: false)
password (blank: false)
tasks (blank: true)
}
static mapping = {
table 'User'
firstName column:'FirstName'
lastName column:'LastName'
password column:'Password'
email column:'Email'
tasks column:'UserId'
}
我也有一个Task类,看起来像这样。
public class Task {
String imageUrl
String name
String shortDescription
String longDescription
Date dueDate
Boolean complete
static belongsTo = [User]
static constraints = {
imageUrl (blank: true)
name (blank: false, nullable: false)
shortDescription (nullable: false)
longDescription (nullable: false)
dueDate (blank: false)
complete (blank: false)
}
static mapping = {
table 'Task'
imageUrl column:'ImageUrl'
name column:'Name'
shortDescription column:'ShortDescription'
longDescription column:'LongDescription'
dueDate column:'DueDate'
complete column:'Complete'
}
每个类都有独立的控制器。
如您所见,用户拥有(包含)许多任务。这就是为什么我使用SortedSet来包含所有任务的原因。
我的问题:在以下UserController代码中,我需要收集SortedList中 userToDisplay 的所有任务。你能告诉我我做错了什么吗?在SortedSet中没有任何东西被拉回来。
def Login()
{
if(request.method == 'POST')
{
def userToDisplay = User.findByEmailAndPassword(params.email, params.password)
userToDisplay.Tasks = Task.findAllByUserId(userToDisplay.id)
if(userToDisplay)
{
//We have our user. Display his info.
}
else
{
//We don't have our user. Display an error message.
}
}
}
请告诉我如何纠正这个问题。这看起来非常简单,而且我还不太明白。谢谢。
答案 0 :(得分:0)
用户已经拥有:static hasMany = [tasks: Task]
,因此您无需Task.findAllByUserId(userToDisplay.id)
:
def userToDisplay = User.findByEmailAndPassword(params.email, params.password)
def userTasksAsList
if(userToDisplay?.tasks.size())
userTasksAsList = userToDisplay?.tasks as List
....
如果您仍想查找用户的所有任务,请确保添加对任务类static belongsTo = [user:User]
的后向引用,然后Task.findAllByUser(userInstance)