`
热带翎羽
  • 浏览: 64731 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Grails的Many-to-Many改良

阅读更多
标准的M-M做法:
class User{
    static hasMany=[roles:Role]
    String name
}

class Role{
    static belongsTo = User
    static hasMany=[users:User]
    String name
}

使用方法:
Role roleUser=new Role(name: "ROLE_USER").save()
Role roleAdmin==new Role(name: "ROLE_ADMIN").save()

User user1= new User(name: "bruce_lin_chn")
user1.addToRoles(roleUser)
user1.save()

存在的问题:
[list]
  • hasMany会在User和Role中创建Set(org.hibernate.collection.PersistentSet)
  • 为了唯一性检查,增加一个Role到User要求加载所有用户角色的实例和所有其他拥有该权限的用户
  • 存在乐观锁异常的风险
  • 解决方案:
    class User{
        String name
    }
    
    class Role{
        String name
    }
    
    class UserRole implements Serializable{
        User user
        Role role
        static mapping = {
            table 'user_role_mapping'
            version false
            id composite: ['user', 'role']
        }
        
        static Set<Role> getRoles(User user){
            UserRole.findAllByUser(user).collect{it.role} as Set
        }
    
        static boolean hasRole(User user, Role role){
            return UserRole.countByUserAndRole(user,role)>0
        }
    
        static beforeDeleteUser(User user){
            
        }
    
        static beforeDeleteRole(Role role){
    
        }
    }
    


    分享到:
    评论

    相关推荐

      grails-fck-editor-0.3.zip_grails_grails-fck-editor

      标题中的"grails-fck-editor-0.3.zip_grails_grails-fck-editor"表明这是一个与Grails框架相关的插件,具体来说是FCKeditor的一个版本。FCKeditor是一款广泛使用的开源富文本编辑器,它允许用户在网页上创建和编辑...

      The Grails Framework - Reference Documentation

      - **一对一关联**:通过`belongsTo`或`hasOne`属性实现。 - **一对多关联**:使用`hasMany`属性。 - **多对多关联**:通常通过中间表实现。 - **集合类型**:支持多种集合类型,如列表、集等。 - **组合关系**:...

      grails-doc-CN-1.0.rar

      `grails-doc-CN-1.0.rar` 文件包含的是 Grails 1.0 版本的中文参考文档,对于那些不熟悉英文文档或者想要深入了解 Grails 的中文用户来说,这是一个极其宝贵的资源。 文档主要涵盖以下几个关键知识点: 1. **...

      grails-acegi-0.5.zip

      4. `docs`、`grails-app`、`src`、`scripts`和`lib`目录则分别包含了插件的文档、应用代码、源代码、脚本以及依赖的库文件。 Grails Acegi 0.5插件提供了以下主要功能: - **用户认证**:支持多种认证机制,如...

      grails-datastore-gorm-plugin-support-2.0.4.RELEASE.zip

      总之,"grails-datastore-gorm-plugin-support-2.0.4.RELEASE.zip"提供了一个宝贵的资源,让开发者有机会学习和实践Grails的ORM功能和Android的MVC设计模式。无论是对Grails框架的探索,还是对Android开发的深化,这...

      groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2

      groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2 共两个包,解压后需要将扩展名.zip.bak改名为.zip重新解压。 http://dist.springsource.com/release/STS/3.8.1.RELEASE/dist/ e4.6/spring-tool-...

      groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1

      groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1 共两个压缩包,解压后将扩展名.zip.bak改为.zip再次解压。

      grails-docs-1.0.3

      grails参考文档 The Grails Framework - Reference Documentation Authors: Graeme Rocher, Marc Palmer Version: 1.0.3

      Grails1.3.7-doc

      《深入理解Grails 1.3.7框架:源码剖析与应用实践》 Grails是一种基于Groovy语言的开源Web应用框架,它构建在Java平台之上,旨在提高开发效率,提供简洁、高效的代码生成器,以及强大的插件系统。Grails 1.3.7是该...

      Grails-2.4.4-用户手册

      2. **创建新项目**:通过`grails create-app`命令创建项目,理解`grails-app`目录结构。 3. **编写Domain Class**:学习如何定义领域类,包括关系映射和验证规则。 4. **创建Controller**:了解如何创建控制器,处理...

      grails 中文文档+grails-fckeditor-0.9.5.zip插件

      本文将深入探讨Grails的中文文档以及“grails-fckeditor-0.9.5”插件的相关知识点。 一、Grails框架基础 1. Groovy语言:Grails的基础是Groovy,这是一种面向对象、动态类型的编程语言,语法简洁且与Java高度兼容...

      grails3.2.8-01

      grails3.2.8 part1

      grails-quartz-0.4.1

      在`Grails` 中,`Grails-Quartz` 插件提供了集成`Quartz` 的能力,使得开发者可以在`Grails` 应用中方便地安排和执行周期性任务。 **1. QuartzGrailsPlugin.groovy** 这个文件是`Grails` 插件的核心配置文件,其中...

      grails-web-url-mappings-2.5.4.zip

      这个名为"grails-web-url-mappings-2.5.4.zip"的压缩包包含了Grails 2.5.4版本中的Web URL映射相关代码,让我们深入探讨这一关键组件。 Grails是一个基于Groovy语言的全栈式Java web框架,其设计理念是“简洁、生产...

      grails-3.0.5-ga (2/2)

      以下是关于"grails-3.0.5-ga (2/2)"的详细知识点: 1. **Groovy语言**: Grails框架是用Groovy语言编写的,这是一种动态、面向对象的编程语言,与Java高度兼容,但语法更加简洁和灵活。 2. **MVC架构**: Grails遵循...

      grails-getting-started

      ### Grails入门详解 #### 一、Grails框架概述 Grails是一个基于Java平台的开源Web应用框架,它集成了Groovy语言的强大功能与Spring框架的成熟特性,为开发者提供了高效且灵活的开发方式。根据给定文件的描述,...

      grails-bin-1.1

      标题"grails-bin-1.1"指的是Grails框架的1.1版本的二进制发行版。这个版本的Grails是一个免安装版,意味着用户可以直接将它解压到任何位置,而不需要通过传统的安装程序进行安装。 描述中的"本文件只需要放到相应...

      grails-docs-2.0.0

      `grails-docs-2.0.0`是Grails 2.0.0版本的官方文档,包含了丰富的指南、API参考以及国际化资源,对于学习和掌握Grails 2.0.0至关重要。 首先,`index.html`是文档的主页,通常会包含目录、介绍性内容以及如何开始的...

      grails-spring-websocket

      grails-spring-websocket ils子 2.4.x 3.2.7+ 2.5.x 4.0.0+ 安装 要将插件安装到Grails应用程序中,请将以下行添加到build.gradle依赖项部分: implementation "org.grails.plugins:grails-spring-websocket:...

    Global site tag (gtag.js) - Google Analytics