我有一个叫做invoice的对象,它有一个复杂对象的字段
public class Invoice {
@ManyToOne
@JoinColumn(name = "id_site_to")
private Site siteTo;
}
public class Site {
@Id
@GeneratedValue
@Column(name = "id_site")
private long id;
private String description;
...
}
在我的代码中,我从DTO创建了一个发票。如此创建的发票包含一个没有填充所有字段但只填充ID的站点。 当我尝试保存此发票实例(使用JPA存储库)时,我得到了
org.hibernate.TransientPropertyValueException: Not-null property references a transient value
即使数据库中存在网站ID。有一种方法可以执行此保存,而无需先使用select?
从数据库中获取该站点答案 0 :(得分:2)
如果您使用EntityManager
,可以尝试致电getReference()
,请参阅What is the difference between EntityManager.find() and EntityManger.getReference()?了解详情。
使用Hibernate' Session
您也可以使用load()
。
所有这些方法都返回代理而无法访问数据库。
一个注释
使用Hibernate' Session
我只能使用id
按对象设置关联的方式。一切都很好。
答案 1 :(得分:0)
更改创建顺序,此错误表示您正在创建对尚未创建的对象的引用。创建网站,然后创建发票。