我有一个名为
的表Customer
Custid:
Custusername:
Custaddr:
CustDateOfBirth:
现在,我有一个更新参数,希望用户只更新“Custusername,Custaddr”更新Dateofbirth是没有意义的(因此在注册后,它是永久性的。)
所以我这样做:
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;
}
答案 0 :(得分:0)
您是如何创建客户的?您需要按ID查找客户,然后更改它并将其合并回db
Customer c = em.find(Customer.class, id);
c.setCustaddr(custaddr);
em.merget(c);
现在您正在创建一个全新的实体并将其与旧实体合并,所有字段都被数据库中的新实体覆盖,这是合乎逻辑的。
答案 1 :(得分:0)
查看动态更新属性。
@org.hibernate.annotations.Entity(dynamicUpdate=true)
dynamic-update(可选 - 默认为false):指定应在运行时生成UPDATE SQL,并且只能包含值已更改的列。