GORM hasMany使用多个列

时间:2014-06-02 18:20:32

标签: grails gorm

我有一个课程如下

class PrefValue extends MainDomain {

    String entityClass
    Long entityId
    ....
}

我现在正在尝试将一个集合映射到两个不同的类

class TypeA extends MainDomain {
  Long entityId
  static hasMany = [preferences:PrefValue]
  static mappedBy = [preferences: "entityId"]
  ...
}
class TypeB extends MainDomain {
  Long entityId
  static hasMany = [preferences:PrefValue]
  static mappedBy = [preferences: "entityId"]
}

出现问题是因为TypeA和TypeB都可以具有相同的ID,但它们将具有不同的entityClass值。我该如何映射?

1 个答案:

答案 0 :(得分:1)

我假设entityId是主键,导致TypeATypeB两者的主键值相同时出现问题。

在这种情况下,您可以删除主键约束,而是使用复合主键。文档详细介绍了它here

如果它不是主键并且只有一个唯一约束,那么你可以使每个鉴别器entityId唯一:

static mapping = { entityId unique: 'entityClass' }