Grails - 返回包含其他对象的对象?

时间:2014-02-18 22:45:00

标签: sql grails foreign-keys gorm

我试图在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.
        }

    }
}

请告诉我如何纠正这个问题。这看起来非常简单,而且我还不太明白。谢谢。

1 个答案:

答案 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)