Мне нужно создать простую базу данных с помощью 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>
Да, я пробовал все виды конфигураций. И я нашел решение. Это моя ошибка, что я использовал Hibernate 5, хотя я использовал старый метод при инициализации экземпляра фабрики услуг. После того, как я использовал StandardServiceRegistry, ошибка не появлялась.




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