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。谢谢!(出于某种原因,我不会让我@你)