Hibernate @Embedded и @Embeddable - PullRequest
       2

Hibernate @Embedded и @Embeddable

0 голосов
/ 14 марта 2019

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

org.hibernate.MappingException: повторяющийся столбец в сопоставлении для объекта: tr.com.ozer.datastructures.Столбец GameObject: x (должен отображаться с помощью insert = "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 ,lativeToBaseA_x ,lativeToBaseA_y и т. Д.

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

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

1 Ответ

0 голосов
/ 14 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...