我有3个域类User,Server,Quota,我想通过以下关系映射它们
最佳答案
您可以在用户和服务器之间创建NxN关系。但是,有必要为该关系创建一个类。这是必需的,因为您需要属性配额。以NxN关系的标准方式,Grails(Hibernate)不会为其创建类。
您将需要三个类:
用户,服务器,用户服务器
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()
}
}
}
请注意,您需要在用户和服务器中创建一个名为userServers:UserServer的hasMany关系。
该解决方案基于以下链接:http://grails.org/Many-to-Many+Mapping+without+Hibernate+XML
关于grails - GORM关系映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22014471/