java - 如何合并而不覆盖不在参数(JPA)中的列?

标签 java jpa

我有一个表叫

Customer

Custid:
Custusername:
Custaddr:
CustDateOfBirth:

现在,我有一个更新参数,希望用户仅更新“Custusername,Custaddr”,更新出生日期没有意义(因此在注册后,它是永久的)。

所以我做了这样的事情:

Customer.setCustid(Custid);
Customer.setCustaddr(Custaddr);
Customer.setusername(Custid);

然后我使用实体管理器:

em.merge(Customer);

所以发生的事情是,细节得到更新但是! Dateofbirth 现在在数据库中为空,尽管我没有为其设置任何参数。

我之前这样做过,但是该方法返回 true 并且没有做任何更改:

//The Set statements are above
emm.getTransaction().begin(); 
try {  
    emm.merge(emm.find(Customer.class, Custid);
    emm.getTransaction().commit();
    return true;
} catch (Exception e) {
    emm.getTransaction().rollback();
    System.out.println( e);
    return false;
}  

最佳答案

你是如何创建你的客户的?你需要通过 id 找到客户,然后更改它并将其合并回 db

 Customer c = em.find(Customer.class, id);
 c.setCustaddr(custaddr);
 em.merget(c);

现在您正在创建全新的实体并将其与旧实体合并,所有字段都被数据库中的这个新实体覆盖是合乎逻辑的。

关于java - 如何合并而不覆盖不在参数(JPA)中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783891/

相关文章:

java - 如何从java运行批处理文件?

java - 如何使用 MySQL 后端在 JPA Spring Boot 微服务中建模三向关系

mysql - 事务回滚在 karaf 中不起作用

java - Hibernate 中 JTA、JPA 和普通 JDBC 的区别

java - 在 JPA 中使用可嵌入 ID 持久化 OneToMany

java - 生成范围内的随机数(java)

java - 使用 @OneToOne 进行双向关系时为 "org.hibernate.TypeMismatchException: Provided id of the wrong type"

java - 如何修复 FileInputStream 仅查看最后一个条目?

java - 仅当类为泛型时,才产生奇怪的编译时错误

java - Hibernate 的持久集为空