休眠@Embedded和@Embeddable

时间:2019-03-14 11:23:22

标签: java postgresql hibernate

我必须使用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>

1 个答案:

答案 0 :(得分:0)

好吧,这是我的错误。但是我会发布我的解决方案,以防有人知道。

我一直在使用Hibernate 5并使用旧方法对其进行初始化。 用StandardServiceRegistry初始化后,错误消失了。 实际上很有趣,在没有5.4版的@Embedded批注的情况下,初始化metod的旧方法可以正常工作。它应该给出“错误的方式初始化错误”之类的东西,而我不会花很多时间在这上面!