我们说我有这种休眠关系。
class A{
@OneToOne(orphanRemoval = true, cascade = {CascadeType.ALL})
@JoinColumn(name = "b_id", nullable = false)
@Getter
@Setter
@XmlElement
private B b;
}
还有这个
class B{
@OneToOne
@JoinColumn(name = "a_id")
@Getter @Setter
@XmlTransient
private A a;
}
在某些方面我想保存我的A类,这是第一次在数据库上还没有,“但是”B已经存在,因为之前保存在另一个事务中而不是On Cascade by A,所以与之关系B表上的A仍为空。现在使用此当前配置我收到此异常。
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
那么,A我需要做什么配置才能坚持A,并把B与A的关系放在一起?
的问候。
答案 0 :(得分:0)
首先,您将关联映射两次。如果B是所有者方,则需要使用mappedBy标记另一端:
class A{
@OneToOne(mappedBy="a", orphanRemoval = true, cascade = {CascadeType.ALL})
@Getter
@Setter
@XmlElement
private B b;
}
然后这是一步一步的操作顺序:
您需要先获取B
B b session.get(B.class, 1L);
您创建了A
A a = new A();
您设置了关联的两面
a.b = b;
b.a = a;
你坚持
session.persist(a);