如何在Grails中从内部设置Domain类的引用?

时间:2011-12-16 20:48:43

标签: grails gorm

我在这里遇到了一个不寻常的问题。一切都应该在我的理解(作为grails初学者),但不工作:(

我有一个域类用户。用户可以有很多朋友和很多朋友请求。域类中有一个函数将好友请求发送给其他用户。这是来自用户域的代码 -

static hasMany = [friends: User, friendRequests: FriendRequest]
static mappedBy = [friendRequests:'receiver']

def sendFriendRequest(User toUser) {

    if(!isFriend(toUser)) {
        FriendRequest requestToSend = new FriendRequest(status:'pending', sender: this) 
        toUser.addToFriendRequests(requestToSend)
        return true
    }
    return false
}

FriendRequest类是 -

class FriendRequest {

    String status
    User sender

    static constraints = {
    status(inList:["accepted", "pending", "rejected"])
    }

    static belongsTo = [receiver:User]
}

现在,问题是,我期待当前的User对象,我正在运行该函数将被设置为friendRequest的发送者。但奇怪的是,我作为参数传递的toUser被设置为发送者!

任何人都可以解释我错过的东西吗?

1 个答案:

答案 0 :(得分:1)

addToFriendRequests方法覆盖了发件人。它认为FriendRequest.senderUser.friendRequests

的倒数

您的FriendRequest课程需要两个User的引用:一个用于发送者,一个用于接收者。你还需要告诉gorm哪一个映射回friendRequests关系。您可以使用User类中的映射执行此操作:

static mappedBy = [friendRequests:'receiver']