Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails GORM关系映射_Grails_Gorm_Grails Domain Class - Fatal编程技术网

Grails GORM关系映射

Grails GORM关系映射,grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,我有3个域类User、Server、Quota,我想用以下关系映射它们 用户可以使用不同的配额访问多个服务器 但它不应允许用户使用不同的配额访问同一台服务器(或者每个用户可能对每台服务器只有一个条目) 您可以在用户和服务器之间创建NxN关系。但是,需要为该关系创建一个类。这是必需的,因为您需要属性配额。按照NxN关系的标准方式,Grails(Hibernate)不会为其创建类 您将需要三个课程: 用户、服务器、用户服务器 Class UserServer { int quota sta

我有3个域类User、Server、Quota,我想用以下关系映射它们

  • 用户可以使用不同的配额访问多个服务器
  • 但它不应允许用户使用不同的配额访问同一台服务器(或者每个用户可能对每台服务器只有一个条目)

您可以在用户和服务器之间创建NxN关系。但是,需要为该关系创建一个类。这是必需的,因为您需要属性配额。按照NxN关系的标准方式,Grails(Hibernate)不会为其创建类

您将需要三个课程:

用户、服务器、用户服务器

Class UserServer {
  int quota
  static belongsTo = [user:User, server:Server]
  static constraints = {user unique: 'server'}
}
唯一的约束非常重要,因为正如您所说,一个用户可能对每个服务器只有一个条目

要链接和取消链接用户和服务器,可以使用以下方法:

Class UserServer {
    int quota
    static belongsTo = [user:User, server:Server]
    static constraints = {user unique: 'server'}

    static PackScheme link(User user, Server server) {
        UserServer userServer = UserServer.findByUserAndServer(user, server)

        if (!userServer) {
            userServer = new UserServer()
            user.addToUserServers(userServer)
            server.addToUserServers(userServer)
            userServer.save()
        }

        return userServer
    }

    static void unlink(User user, Server server) {
        UserServer userServer = UserServer.findByUserAndServer(user, server)

        if (userServer) {
            user.removeFromUserServers(userServer)
            server.removeFromUserServers(userServer)
            userServer.delete()
        }
    }
}
注意,您需要在用户和服务器中创建一个名为userServers:UserServer的hasMany关系


此解决方案基于以下链接:

,问题是?