Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate @可嵌入@ManyToOne_Hibernate_Jpa_Embeddable - Fatal编程技术网

Hibernate @可嵌入@ManyToOne

Hibernate @可嵌入@ManyToOne,hibernate,jpa,embeddable,Hibernate,Jpa,Embeddable,想象一下下面的课程 @Embeddable class A { @ManyToOne public B classB; ... public State someEnum; } @Entity @Table(name = "TEST") class B { public long id; //... some data @Embedded @AttributeOverrides({ @AttributeOverr

想象一下下面的课程

@Embeddable
class A {
    @ManyToOne
    public B classB;

    ...
    public State someEnum;
}

@Entity
@Table(name = "TEST")
class B {
    public long id;
    //... some data


   @Embedded
   @AttributeOverrides({
        @AttributeOverride(
                name = "classB.id",
                column = @Column(name = "EMBEDDED1_ID")
        ),
        @AttributeOverride(
                name = "someEnum",
                column = @Column(name = "EMBEDDED1_SOMEENUM")
        )
   })
   public A embedded1;

   @Embedded
   @AttributeOverrides({
        @AttributeOverride(
                name = "classB.id",
                column = @Column(name = "EMBEDDED2_ID")
        ),
        @AttributeOverride(
                name = "someEnum",
                column = @Column(name = "EMBEDDED2_SOMEENUM")
        )
   })
   public A embedded2;
}
所以我希望数据库表看起来像

  • 试验
    • 身份证
    • 嵌入的1_ID
    • 嵌入的1_SOMEENUM
    • 嵌入的2_ID
    • 嵌入的2_SOMEENUM
但如果在以下方面失败:

原因:org.hibernate.MappingException:映射中重复列 对于实体:ClassB列:ClassB_id(应与 insert=“false”update=“false”)

版本:

冬眠:5.2.12.1决赛
JPA:hibernate-JPA-2.1-api

不能使用@AttributeOverride重命名外键列。您必须使用@AssociationOverride

@Entity
@Table(name = "TEST")
public class B {

    public long id;

    @AssociationOverride(name = "classB", joinColumns = @JoinColumn(name = "EMBEDDED1_ID"))
    @AttributeOverrides({
            @AttributeOverride(
                    name = "someEnum",
                    column = @Column(name = "EMBEDDED1_SOMEENUM")
            )
    })
    @Embedded
    public A embedded1;

    @AssociationOverride(name = "classB", joinColumns = @JoinColumn(name = "EMBEDDED2_ID"))
    @AttributeOverrides({
            @AttributeOverride(
                    name = "someEnum",
                    column = @Column(name = "EMBEDDED2_SOMEENUM")
            )
    })
    @Embedded
    public A embedded2;

您嵌入了两次对类B有引用的类A。现在,A中的多个元素会导致B的两个外键具有相同的名称classB_id。但是没有办法解决这个问题。你的构造有点奇怪。我知道一个旧的版本,这个碰巧起作用。我不知道为什么,但在我更新后,它现在变为不工作了。我使用了@AttributeOverride并希望它会消失,但hibernate似乎没有在内部重命名它,仍然使用导致错误的classB_id。我说的对吗?是的,这很奇怪。但我没有实施它。。。。我被迫在这个项目上工作;-)