我有一张桌子叫

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);


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

10-01 08:47
查看更多