使用给定的字段对象id存储JPA实体而不是对象本身

时间:2015-03-15 13:59:35

标签: java jpa persistence

问题在于:

我们有实体:

@Entity
public class Feedback {
    @Id
    @GeneratedValue(generator="token")
    private String id; 

    @ManyToOne
    private Product product;

    private String message;

    // other fields
}

我们有一个服务器端点,可以从客户端收到反馈。 以多部分/基于表单的格式收到的反馈,包括字段:

 ProductId - product identifier
 Message - feedback message
 Some other fields

要设置Feedback.product,我们需要从JPA加载Product对象 - 这可能非常耗时,并且会产生不必要的查询。

是否可以存储实体,但是传递产品ID而不是产品对象? 我们需要一些方法来修改INSERT查询。

我们在Spring和Vaadin中使用EclipseLink JPA。

1 个答案:

答案 0 :(得分:8)

使用EntityManager.getReference():如果实体尚未加载,它只是在ID周围创建一个延迟初始化的代理,而不会导致执行任何SQL查询。