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

标签 grails gorm

在这里,我面临一个不寻常的问题。在我的理解下,一切都应该正常工作(作为grails初学者),但不起作用:(

我有一个域类User。用户可以有很多 friend 和很多friendRequests。域类中有一个功能可以向其他用户发送好友请求。这是用户域中的代码-

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被设置为发送者!

谁能解释我所缺少的吗?

最佳答案

addToFriendRequests方法覆盖了发送者。它认为FriendRequest.senderUser.friendRequests相反

您的FriendRequest类将需要两个对User的引用:一个用于发送者,一个用于接收者。您还需要告诉gorm哪个映射回friendRequests关系。您可以使用User类中的映射来做到这一点:

static mappedBy = [friendRequests:'receiver']

关于grails - 如何在Grails中从自身内部设置Domain类的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539933/

相关文章:

unit-testing - 如何在Grails中为一个AresTo关系创建有效的参数用于单元测试?

grails - 为 grails 插件编写集成测试用例

grails - 如何在Grails中为所有域类设置默认序列生成器

grails - Grails:旧版数据库-带有复合ID的记录不会更新

json - Grails JSON渲染

json - 如何在 grails 3.1.10 restful 服务中从 request.JSON 中清理 html/javascript

grails - Grails-网址中的%252F

hibernate - 任何有关 `saveAll`的文档?

hibernate - GORM协会解释

hibernate - Grails - 严重的 IllegalStateException - 类 [] 上的方法在 Grails 应用程序之外使用