Grails GORM有许多使用多列的方法

Grails GORM有许多使用多列的方法,grails,gorm,Grails,Gorm,我有如下的课程 class PrefValue extends MainDomain { String entityClass Long entityId .... } 我现在正试图将一个集合映射到两个不同的类 class TypeA extends MainDomain { Long entityId static hasMany = [preferences:PrefValue] static mappedBy = [preferences: "ent

我有如下的课程

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值。我将如何映射它?

我假设
entityId
是主键,当
TypeA
TypeB
都具有相同的主键值时,就会出现问题

在这种情况下,可以删除主键约束,改为使用复合主键。文档中对它进行了更详细的介绍

如果它不是主键,只是具有唯一约束,则可以使每个鉴别器的
entityId
唯一:

静态映射={
entityId唯一:“entityClass”

}

因此,关于entityId,您是对的,但entityClass是字符串形式的类名(TypeA-TypeB)。那么这仍然有效吗?它会影响持久性吗?@Jackie是的,我相信unique的工作方式是在给定其他列的值的情况下检查该值是否唯一。我不知道为什么它会影响持久性。如果验证失败,那么GORM将不会坚持它,但您是否在询问其他问题?您可以编写一些集成测试来检查这一点。啊,我发现一开始不清楚您所说的是“PrefValue”类上的Id。我现在明白了,明天我会尝试一些东西。我只是想知道如何让它知道我想要的组合是一个具有“X”entityClass的组合。我认为这可能会起作用,因为实体ID在该类中不是唯一的,只有TypeA和TypeB将其用作ID。谢谢!(出于某种原因,我不会让我@你)