多层JPA AttributeOverride声明

时间:2019-06-05 20:21:43

标签: java spring spring-boot jpa

我有一个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>

0 个答案:

没有答案
相关问题