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

时间:2010-10-06 04:41:21

标签: java jpa

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

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

我正在使用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.

3 个答案:

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

它会起作用..