如果此类值为 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
我正在更新数据库中的条目,为此我创建了一个对象,其中 仅包含我要更新的字段。
我的问题是数据库中的空字段也被替换了。所以当我只想忽略那些空值时,数据库中的非空值被替换为空值。
我尝试在我的@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