如果此类值为 null jpa,如何不更新条目的属性

How to do not update attributes of an entry if such value is null jpa

我正在更新数据库中的条目,为此我创建了一个对象,其中 仅包含我要更新的字段。

我的问题是数据库中的空字段也被替换了。所以当我只想忽略那些空值时,数据库中的非空值被替换为空值。

我尝试在我的@Entity 中使用@DynamicUpdate 注释,但它不起作用,因为它仍然用 null 替换那些非空值,因为它们具有不同的值。

到目前为止,这是我的代码:

@Entity
@DynamicUpdate
@Table(name = "Exer")
public class Exer implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Long id;
    private String nome;
    private String grupo;
    private String path;
}

在控制器中:

Exer exer = new Exer();
exer.setId(4);
exer.setNome("value");
exerDao.update(exer);

更新的 Dao 实现:

@PersistenceContext
private EntityManager em;

@Transactional
public Exer update(Exer exer) {
    return em.merge(exer);
}

在这种情况下,我只想将 Nome 更改为 "value",而我为该条目的其他两个字段插入 null。

这不是您使用 JPA 更新的方式。您首先从数据库中获取现有实体,例如 EM.find(Exer.class,KEY),然后您设置要更新的字段,提交事务,就是这样。 JPA 将仅更新已更改的字段。

em.getTransaction().begin();//or skip if transaction is managed by controler
Exer exer = em.find(Exer.class,4);
exer.setNome("value");
em.getTransaction().commit(); //skip if transaction is managed