使用JPA更新数据库中的记录的问题

我在数据库中有对象,其值如下:

  • id = 1
  • name =“john”
  • chargeid = 6

我使用merge语句更新代码em.merge(obj)

当我看到JPA生成的查询时,我发现在更新查询中,只更新具有新值或非空值的字段。

我检查了与此对象关联的bean,发现没有与chargid关联的注释

现在,当我尝试更新此JPA时,如果我没有将anyvalue设置为null,它会得到正确更新。 现在,如果我设置chargeid = null然后尝试将其设置为持久化为db,它会在db中更改为null但它会将零售值保留为先前的值。如何?

以下是在数据库中记录的详细信息如下

 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. 

另一个选项是在合并方法执行后将对象设置为NULL,如下所示:

 obj.setchargID(6) obj = entinymanager.merge(obj) obj.setchargID(null) 

我遇到了同样的问题,因为我创建了一个新对象:

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

我希望这有帮助。

也许你为chargeid列定义了’not null’? (在您的数据库中)

请按照以下步骤操作。 未显式设置的值将自动设置为null。

 obj.setId(1); obj.setName('XYZ'); entinymanager.merge(obj); 

它会工作..