我有一张桌子叫
Customer
Custid:
Custusername:
Custaddr:
CustDateOfBirth:
现在,我有一个更新参数,希望用户仅更新“ Custusername,Custaddr”对更新Dateofbirth没有意义(因此注册后,它是永久的)。
所以我做这样的事情:
Customer.setCustid(Custid);
Customer.setCustaddr(Custaddr);
Customer.setusername(Custid);
然后我使用实体管理器:
em.merge(Customer);
因此,发生的是,详细信息已更新,但是! Dateofbirth现在在数据库中为null,无论我没有为其设置任何参数的事实。
我之前做过,但是该方法返回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查找客户,然后对其进行更改并将其合并回数据库
Customer c = em.find(Customer.class, id);
c.setCustaddr(custaddr);
em.merget(c);
现在,您正在创建全新的实体并将其与旧实体合并,这是合乎逻辑的,所有字段都将被数据库中的新实体覆盖。