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

Store JPA entity with given field object id instead of object itself

问题如下:

我们有实体:

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

    @ManyToOne
    private Product product;

    private String message;

    // other fields
}

我们有一个服务器端点,它接收来自客户端的反馈。 以 multipart/form-based 格式收到的反馈,字段:

 ProductId - product identifier
 Message - feedback message
 Some other fields

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

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

我们将 EclipseLink JPA 与 Spring 和 Vaadin 结合使用。

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