JPA - TransientPropertyValueException,同时保存仅具有ID的对象

时间:2016-01-29 11:05:34

标签: 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 String description;
    ...
}

在我的代码中,我从DTO创建了一个发票。如此创建的发票包含一个没有填充所有字段但只填充ID的站点。 当我尝试保存此发票实例(使用JPA存储库)时,我得到了

org.hibernate.TransientPropertyValueException: Not-null property references a transient value

即使数据库中存在网站ID。有一种方法可以执行此保存,而无需先使用select?

从数据库中获取该站点

2 个答案:

答案 0 :(得分:2)

如果您使用EntityManager,可以尝试致电getReference(),请参阅What is the difference between EntityManager.find() and EntityManger.getReference()?了解详情。

使用Hibernate' Session您也可以使用load()

所有这些方法都返回代理而无法访问数据库。

一个注释

使用Hibernate' Session我只能使用id按对象设置关联的方式。一切都很好。

答案 1 :(得分:0)

更改创建顺序,此错误表示您正在创建对尚未创建的对象的引用。创建网站,然后创建发票。