我有以下数据库模型:
A| 1..* ------ 0..1 | B
与以下实体:
A:
@JoinColumn(name = "B", referencedColumnName = "id")
@ManyToOne
private B singleB;
乙:
@OneToMany(mappedBy = "B")
private List<A> aList;
然后我试图为A创建一个新的B:
...
b.prepareCreate(existingA);
dao.create();
...
方法:
public void prepareCreate(A existingAObject) {
b = new B();
b.setAList(new ArrayList());
b.getAList.add(existingAObject);
}
public void create() {
getEntityManager().persist(b);
}
然后它抛出异常。长话短说:我想为现有的 A 创建一个新的 B,但 Hibernate 正在尝试创建一个新的 A。我认为这是一个注释问题,但不确定如何。
更新:
向我们展示如何获得现有的 AObject。- 来自数据库(existingA = em.find(id));
还要意识到如果要保存 A 和 B 之间的关联,则必须设置 A.singleB,因为它是关联的拥有方。- 试过了,仍然得到异常
并向我们展示 B 实体的完整代码:它的 ID 是什么?它是如何产生的?
很简单:
public class B implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Integer id;
@OneToMany(mappedBy = "B")
private List<A> aList;
@XmlTransient
public List<A> getAList() {
return eventos;
}
public void setAList(List<A> aList) {
this.aList= aList;
}
}