Несколько слоев объявлений JPA AttributeOverride - PullRequest
0 голосов
/ 05 июня 2019

У меня есть класс 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...