我正在更新数据库中的条目,为此我创建了一个只包含我要更新的字段的对象。
我的问题是数据库中的空字段也被替换了。因此,当我只想忽略那些空值时,数据库中的非空值将被替换为空。
我试图在@Entity中使用@DynamicUpdate注释,但它不起作用,因为它仍然用null替换那些非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。
答案 0 :(得分:2)
不是您使用JPA更新的方式。首先从DB获取现有实体,例如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