我有一堂课
@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
请帮助
答案 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方法。