2014-02-25 71 views
0

我有3個領域類用戶服務器配額,我想他們有以下關係映射GORM關係映射

  • 一個用戶可以訪問很多服務器不同配額
  • 但它不應該允許用戶訪問相同的服務器不同配額(或+每用戶可以爲每個服務器只有一個條目)
+1

問題是? – Alidad

+0

badum-tsss ... :) –

回答

1

您可以創建用戶和服務器之間的N×N的關係。但是,有必要爲這種關係創建一個類。這是必要的,因爲您需要屬性配額。在NxN關係的標準方式中,Grails(Hibernate)不會爲它創建一個類。

你需要三類:

用戶,服務器,UserServer的

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() 
     } 
    } 
} 

請注意,您需要創建在用戶和服務器稱爲一個的UserServer關係的hasMany:UserServer的。

此解決方案基於此鏈接:http://grails.org/Many-to-Many+Mapping+without+Hibernate+XML