2012-05-05 53 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

我選擇第二個選項,我寫了一些額外的方法並創建了一個服務來返回用戶和客戶端實例,我完成了!無論如何,謝謝你們。