Hibernate @Embedded и @Embeddable

Мне нужно создать простую базу данных с помощью Hibernate, но что бы я ни делал, я получил эту ошибку:

org.hibernate.MappingException: повторяющийся столбец в сопоставлении для объекта: столбец tr.com.ozer.datastructures.GameObject: x (должен быть сопоставлен с вставкой = "false" update = "false")

Во-первых, я использую PostgreSQL 11 и Hibernate 5.4.

Вот что я пытаюсь сделать:

@Embeddable
public class Position {

    private Integer x;

    private Integer y;

    // Setters end getters
}

@Entity
public class GameObject {
    @Id
    private Integer id;

    @Embedded
    private Position absPosition;

    @Embedded
    private Position relativeToBaseA;

    @Embedded
    private Position relativeToBaseB;

    // Setters and getters
}

Я не хочу использовать @AttributeOverrride, поскольку в моем классе Position больше полей, чем здесь, и я не хочу определять их все для каждого поля. Вместо этого я бы просто написал отдельные поля.

И меня не волнуют имена столбцов базы данных так много атм. Есть ли в Hibernate механизм автоматического именования? Например, absPosition_x, absPosition_y,relativeToBaseA_x,relativeToBaseA_yи т. д.

Примечание. Несмотря на то, что у меня есть конфиг «implicit_naming_strategy» в моем файле hibernate.cfg.xml, я все равно получаю сообщение об ошибке. Вот строка:

<property name = "hibernate.implicit_naming_strategy">org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl</property>

Вы пробовали использовать org.hibernate.cfg.DefaultComponentSafeNamingStrategy?

Lorelorelore 14.03.2019 12:39

Да, я пробовал все виды конфигураций. И я нашел решение. Это моя ошибка, что я использовал Hibernate 5, хотя я использовал старый метод при инициализации экземпляра фабрики услуг. После того, как я использовал StandardServiceRegistry, ошибка не появлялась.

cureshot 14.03.2019 13:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
264
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, ошибка с моей стороны. Но я опубликую свое решение, если у кого-то оно есть.

Я использую Hibernate 5 и инициализирую его старым методом. После того, как я инициализировал StandardServiceRegistry, ошибка исчезла. На самом деле интересно, старый метод инициализации нормально работает без аннотаций @Embedded на версии 5.4. Это должно дать «неправильную ошибку инициализации» или что-то в этом роде, и я бы не стал тратить на это часы!

Другие вопросы по теме