grails - GORM关系映射

标签 grails gorm grails-domain-class

我有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关系。

    该解决方案基于以下链接:http://grails.org/Many-to-Many+Mapping+without+Hibernate+XML

    关于grails - GORM关系映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22014471/

    相关文章:

    grails - Maven Grails 插件环境

    spring - Grails Spring Security OAuth2提供者对具有正确承载 token 的资源的请求重定向到登录

    grails - grails-最小/最大约束无法进行 float ?

    grails - mapWith和hasMany在Grails v3.3.5的运行应用程序中给出错误,在Grails v3.2.11上运行良好

    hibernate - Grails排除了加载子属性或映射的可能性吗?

    hibernate - 在GORM标准查询中进行计算

    grails - 如何将对象实例从一个 Controller 传递到grails中的另一个 Controller 中的 Action

    grails - Grails 2.1 dateCreated域保存时间歇性地为null

    caching - Grails Controller 在更改数据库时未刷新缓存

    grails - Grails中的Set属性方法无法全局更改实例