将JPA嵌入式实体类ID映射到可嵌入实体类ID

时间:2018-06-29 09:53:58

标签: java hibernate spring-data-jpa microservices hibernate-mapping

我有一堂课

@Entity
public class A {
    @Embedded
    @AttributeOverride(name = "id", column = @Column(name = "b_id"))
    private B b;
}

表A中有b_id BIGINT NOT NULL列

@Embeddable
@Entity
public class B {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

我们遇到错误:原因:org.hibernate.MappingException:找不到组件属性:id

基本上,我们需要使用id在A中映射B

请帮助

2 个答案:

答案 0 :(得分:0)

我认为问题出在嵌入式类中的@Id上。我们不能在嵌入式类中使用。尝试删除它?如果您可以删除它,请只使用@EmbeddedId(如果您只需要一个id字段)。

答案 1 :(得分:-1)

尝试一下

    @Entity
    public class A implements Serializable {
    private static final long serialVersionUID = 9154946919235019012L;
    @Embedded
    @AttributeOverride(name = "id", column = @Column(name = "b_id"))
    private B b;
    public A() {
    }

    public A(B b) {
        this.b = b;
    }


    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
    }

这是B级

@Embeddable
@Entity

public class B implements Serializable {
    private static final long serialVersionUID = 5579181803793008928L;
    @Id
    @Column(nullable = false)
    private Long id;

    public B(Long id) {
        this.id=id;
    }
    public B(){

    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }
    }

除了隐式的no arg之外,您没有getter和setter或其他构造函数。您应该同时具有no-args构造函数以及getter和setter方法。