我有一个Entity类和几个Embedded类,这些类如下嵌入:
@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列名被重复。
如何解决此问题?
我尝试在m1和m2的TopLevel类中为leafParam添加其他AttributeOverride列,但无济于事。
如前所述,这些类由Swagger代码生成。如果这不是代码生成器,那么我可能会将LeafLevel东西放到MiddleLevel类中,但是我无法更改原始数据模型,所以这对我来说不是一个选择。
我在以下Maven定义中设置了JPA提供程序:
<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>