使用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);
它会工作..
- 机械化为Java
- 在PATH中找不到firefox二进制文件。 确保安装了firefox。 操作系统似乎是:VISTA
- spring integration sftp mainframe:写文件失败; 嵌套exception为3:权限被拒绝
- 我可以使用JAVAC编译包含多个文件和目录的项目吗?
- java.io.IOException:服务器返回HTTP响应代码:411为URL:https://login.live.com/oauth20_token.srf?code =
- Java:如何将控件拖放到新位置而不是其数据?
- 如何使用Java登录网站
- 如何使用ArrayList的get()方法
- 在Spring 3.0 GET请求中,@ PathVariable和@RequestParam之间的区别是什么