我在数据库中有对象,其值如下:
我正在使用merge语句来更新代码
em.merge(obj)
当我看到JPA生成的查询时,我发现在更新查询中,只更新了具有新值或非空值的字段。
我检查了与此对象关联的bean,发现没有与chargid关联的注释
现在,当我尝试更新此JPA时,如果我没有将anyvalue设置为null,它会得到正确更新。 现在,如果我设置chargeid = null然后尝试将其持久保存到db中,它会在db中更改为null但它会将零售值保留为先前的值。来了吗?
以下是详细信息 1在数据库中有如下记录
ID Name chargeID
1 john 5
现在,如果我将对象的值设置为
obj.setID(1),
obj.setName("johnNew")
obj.setchargID(6)
entinymanager.merge(obj)
然后记录更新如下,这很好
Id name chargeid
1 johnNew 6
现在,如果我想将chargeid设置为null,我使用代码
obj.setId(1)
obj.setName('XYZ')
obj.setChargeId(null); // i want to update it as null.
现在记录将更新如下
id name chargeid
1 XYZ 6 //name is updated to XYZ,but chargeid is not updated to null, how come?
i want to set chargeid to null.
答案 0 :(得分:1)
我遇到了同样的问题,因为我创建了一个新对象:
DatabaseObject obj = new DatabaseObject();
obj.setSomeValue(null);
obj.setRowId(1);
entityManager.merge(obj);
我想如果我明确设置了id号,那么如果JPA对象是新的,或者是具有所需id的现有对象,则无关紧要。也许你做了同样的事情?
正确的代码是:
DatabaseObject obj = entityManager.find(DatabaseObject.class, (long) 1);
obj.setSomeValue(null);
obj.setRowId(1);
entityManager.merge(obj);
我希望这会有所帮助。
答案 1 :(得分:0)
也许你为chargeid列定义了'not null'? (在您的数据库中)
答案 2 :(得分:0)
请按照以下步骤操作。 未明确设置的值将自动设置为空。
obj.setId(1);
obj.setName('XYZ');
entinymanager.merge(obj);
它会起作用..