2012-05-05 30 views
0

我有以下域Grails的自定义连接表

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

一个老的系统,所以我不能真正改变了系统的架构。我已分配任务来实现某个用户只能访问某些帐户的系统。这是一个多对多关系的经典案例,但问题在于这两个域位于两个不同的数据库中。如果可能的话我搜索了一下,但我意识到这是不可能的。所以我现在正在考虑创建一个自定义连接表来存储哪些用户可以访问哪些帐户的信息。该表可以有两列'accountId'和'userId'。所以对于这个,我必须在grails中创建一个新的域吗?或者有没有切肉刀这样做? 在此先感谢。

回答

-1

如果数据库彼此“可见”(在同一台服务器上或它们之间有一个数据库链接),您应该能够使用完全限定的表名('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

+0

我已经这样做了,现在我需要在这两者之间创建一个连接表。 –

1

如果创建joinTable在DB你要创建它,你是如何在主去处理更新(帐户,用户)表和CEEP您的加入表up2date?

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

你的手杖有2个Domain类,每个指向不同的dataSource(DataBase)。

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

+0

是的,我有两个领域类指向两个不同的来源。用户表在usermanagement中,Account在xyz数据库中。用户管理是一个普通的数据库,其他应用程序也使用它,所以我不能触及它。 xyz是我的数据库,所以我可以把连接表放在这个数据库中。我需要规范用户的访问权限 –

1

当我搜索了这个解决方案,我没有发现任何可持续的解决方案。我最终将可能的解决方案缩小到了两个: 1.使用sql(某种补丁程序)创建域表(仅限于),并在grails中使用硬编码查询来写入和访问表中的数据。 2.创建一个像AccountUser这样的域类,它具有属性clientId和userId

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