我必须使用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类比这里有更多字段,并且我不想为每个字段定义所有字段。相反,我只写单独的字段。
而且我也不在乎数据库列名这么多的atm。 Hibernate中是否有任何自动命名机制?像absPosition_x,absPosition_y,relativeToBaseA_x,relativeToBaseA_y等。
注意:尽管我的hibernate.cfg.xml中有“ implicit_naming_strategy” conf,但仍然出现错误。这是一行:
<property name="hibernate.implicit_naming_strategy">org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl</property>
答案 0 :(得分:0)
好吧,这是我的错误。但是我会发布我的解决方案,以防有人知道。
我一直在使用Hibernate 5并使用旧方法对其进行初始化。 用StandardServiceRegistry初始化后,错误消失了。 实际上很有趣,在没有5.4版的@Embedded批注的情况下,初始化metod的旧方法可以正常工作。它应该给出“错误的方式初始化错误”之类的东西,而我不会花很多时间在这上面!