合并分离的JPA实体忽略未修改的字段

时间:2015-09-16 21:32:51

标签: java jpa jaxb jax-rs eclipselink

简短版本:有没有办法告诉JPA在合并时忽略分离实体实例的空属性?

长版:

我有以下情况:

Web应用程序通过HTTP REST与后端进行通信。后端使用JAX-B,JAX-RS,EJB和JPA2.0(EclipseLink)。应用程序功能基本上是CRUD。

由于这种设计,通过JAX-RS接收的所有实体都是分离的实体,导致JPA替换所有属性和关系(如果接收时关系为null,则JPA删除数据库中的关系)

我的想法是,在A和B @OneToMany之间有一个A<>---B单向聚合关系(这会创建一个连接表),我想修改A拥有的属性,保留它的引用到B未经修改。为了做到这一点,我正在做以下事情:

  1. 通过JAX-RS获取A及其所有属性和引用。
  2. 修改网络应用程序中的记录。
  3. 通过JAX-RS发送新值。
  4. 合并新的反序列化实体(处于分离状态)。
  5. 问题是,随着应用程序的增长,A获得新的关系并且数据将随之不断增长(A的CRUD操作不需要这些关系。

    我知道解决方案是从数据库中获取未修改的记录并将其合并到代码中,但我正在寻找一种避免这种额外数据库查询的解决方案。

1 个答案:

答案 0 :(得分:0)

如果您在GET请求中为该实体查询了A的JPA,那么它应该位于L2缓存中,因此在其上使用查找操作应该访问缓存。然后它是一个简单的情况或合并更改的值。

如果你仍想简单地合并A而没有合并级联到B,你可以标记实体关系,以便它不会在合并时级联。

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy = "aEntity")
相关问题