我有一个表叫
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/