【问题标题】:Custom Join table in grailsgrails中的自定义连接表
【发布时间】:2012-05-05 12:22:05
【问题描述】:

我有以下域名

  1. 用户(在名为 usermanagement 的数据库中)和
  2. 帐户(在另一个数据库 xyz 中)

它是一个旧系统,所以我无法真正改变系统的架构。我被分配了一个任务来实现一个特定用户只能访问特定帐户的系统。这是多对多关系的经典案例,但问题在于这两个域位于两个不同的数据库中。如果可能的话,我用谷歌搜索,但我意识到这是不可能的。所以我现在正在考虑创建一个自定义连接表来存储允许哪些用户访问哪些帐户的信息。该表可以有两列“accountId”和“userId”。因此,为此,我是否必须在 grails 中创建一个新域,或者有什么更简洁的方法吗? 提前致谢。

【问题讨论】:

    标签: grails many-to-many grails-orm jointable


    【解决方案1】:

    如果您创建 joinTable 您将在哪个数据库中创建它,以及您将如何处理主(帐户、用户)表中的更新并更新您的连接表 up2date ?

    我认为(对于这种情况)您不需要连接表,您需要在应用程序级别处理业务逻辑。

    你可以有 2 个域类,每个类指向不同的数据源(DataBase)。

    http://grails.org/doc/latest/guide/conf.html#multipleDatasources

    【讨论】:

    • 是的,我有两个域类指向两个不同的来源。用户表在用户管理中,帐户在 xyz 数据库中。用户管理是一个通用数据库,其他应用程序也使用它,所以我无法触及它。 xyz 是我的数据库,所以我可以将连接表放在这个数据库中。我需要规范用户的访问权限
    【解决方案2】:

    在寻找解决方案时,我没有找到任何可持续的解决方案。我最终将可能的解决方案缩小到两个: 1. (仅)使用 sql、某种补丁创建域表,并使用 grails 中的硬编码查询在表中写入和访问数据。 2. 创建一个域类,如 AccountUser 具有属性 clientId 和 userId

    我选择了第二个选项,我写了一些额外的方法并创建了一个服务来返回用户和客户端实例,我完成了!无论如何,谢谢大家。

    【讨论】:

      【解决方案3】:

      如果数据库对彼此“可见”(在同一台服务器上或它们之间存在 db 链接),您应该能够使用完全限定的表名('schema.tablename')映射域类在映射闭包中。

      伪代码:

      class User {
      
      static mapping = {
          table "usermanagement.user"
      }
      
      static hasMany = [Account:accounts]
      
      }
      
      class Account {
      
      static mapping = {
          table "xyz.account"
      }
      
      }
      

      http://grails.org/doc/latest/guide/GORM.html#tableAndColumnNames

      【讨论】:

      • 我已经这样做了,现在我需要在这两者之间创建一个连接表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2012-08-18
      相关资源
      最近更新 更多