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

时间:2015-02-18 22:40:52

标签: java mysql hibernate jpa annotations

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

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

我试图在@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。

1 个答案:

答案 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