Java JPA-保存只有ID的对象时发生TransientPropertyValueException
我有一个名为invoice的对象,它有一个字段,它是一个复杂的对象Java JPA-保存只有ID的对象时发生TransientPropertyValueException,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个名为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 S
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:非空属性引用一个瞬时值
即使数据库中存在站点Id。有一种方法可以执行此保存,而不必首先使用select从数据库获取站点?如果使用
EntityManager
,您可以尝试调用getReference()
,请参阅以了解详细信息
使用Hibernate的会话
也可以使用load()
所有这些方法都返回代理,而不访问数据库
一个音符
在Hibernate的
会话中
我使用您的方法来设置仅具有id
的对象关联。一切正常。更改创建顺序,此错误表示您正在创建对尚未创建的对象的引用。创建站点,然后创建发票。你能提供完整的stacktrace吗?他在数据库中已经有了站点。他想设置一个假的站点
,只填充id
,而不从数据库加载整个站点
。