【发布时间】:2017-06-20 22:08:27
【问题描述】:
我想在不添加 Cascade=CascadeType.ALL 的情况下解决瞬态对象异常。一开始,这里是我的实体。第一个是Person.java
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
//(cascade = CascadeType.ALL)
private Address address;
---------
}
地址在数据库中只有两个元素(“label”= USA,“label”=Canada)。它是一个数据存储库。直到这里一切都很好,但问题从这两个实体开始。
这是我的实体合同:
public class Contract implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@ManyToOne(cascade =CascadeType.ALL)
private Person person;
}
最后也是最重要的实体Company.java:
public class Company implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Contract contract;
}
这就是问题所在,当我想创建一家公司时,我收到了这个错误:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
你们中的一些人会告诉我在私有地址地址之前添加 Cascade=CascadeType.ALL 但我不想这样做,因为地址是一个数据存储库,我不想保留它我可以做所有事情的级联 execpt 坚持。
感谢您的帮助。
【问题讨论】:
标签: hibernate jpa jakarta-ee