我有以下数据库模型:
A| 1..* ------ 0..1 | B
使用以下实体:
A:
@JoinColumn(name = "B", referencedColumnName = "id")
@ManyToOne
private B singleB;
B:
@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.我认为这是一个注释问题但不确定如何。
更新:
告诉我们你如何获得现有的对象。 - 来自数据库(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;
}
}