У меня есть класс Entity и несколько классов Embeddable, которые встраиваются следующим образом:
@Entity
class TopLevel {
@Id
String id;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="middleParam",
column=@Column(name="m1_middleParam")),
@AttributeOverride(name="leaf",
column=@Column(name="m1_leaf"))
})
MiddleLevel m1;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="middleParam",
column=@Column(name="m2_middleParam")),
@AttributeOverride(name="leaf",
column=@Column(name="m2_leaf"))
})
MiddleLevel m2;
}
@Embeddable
class MiddleLevel {
String middleParam;
@Embedded
LeavLevel leaf;
}
@Embeddable
class LeafLevel {
String leafParam;
}
Но я получаю org.hibernate.MappingException: Repeated column in mapping for entity: ...top_level.m1 column: leaf_param
. Эти имена классов и атрибутов являются надуманными, поскольку мои настоящие классы основаны на коде Swagger, поэтому точные имена в сообщении об ошибке, которое я получаю, отличаются.
Это исключение имеет смысл, поскольку LeafLevel эффективно втягивается в класс TopLevel несколько раз, а имя столбца leafParam повторяется.
Как я могу решить эту проблему?
Я попытался добавить дополнительные столбцы AttributeOverride для leafParam в классе TopLevel для m1 и m2, но безрезультатно.
Как упоминалось ранее, эти классы генерируются кодом Swagger. Если бы это не было codegen, я бы, вероятно, поместил материал LeafLevel в класс MiddleLevel, но я не могу изменить исходную модель данных, так что это не вариант для меня.
Поставщик JPA, который у меня есть, установлен в следующих определениях Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.2.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.198</version>
<scope>runtime</scope>
</dependency>