【发布时间】:2018-10-17 19:01:10
【问题描述】:
我正在使用 Spring Data(版本 1.13.9.RELEASE)并且有一个名为 myRepository 的 CrudRepository。我正在调用myRepository.save(myObject),以覆盖数据库中myObject 的现有实例,并将myObject 的某些字段指定为null。
例如:
{
"prop1": "val1",
"prop2": null,
"prop3": "val3"
}
当我调用myRepository.save(myObject) 并读取返回值时,我设置为null 的myObject 的所有字段都返回为null(本例中为prop2)。
但是,在调用save() 之后,数据库中prop2 的值不是null - 它仍然是我调用save() 之前的值。
这实际上是我在这种特殊情况下想要的行为(在调用 myRepository.save() 时忽略 null 值),但我希望 save() 的返回值能够反映之后数据库中的实际情况操作,而不是只返回更新后的字段并将指定为null 的字段设置为null 或其默认值(例如布尔值的false。
这是CrudRepository 的save() 行为的预期行为吗?
【问题讨论】:
-
只是好奇您的数据库是否正确更新?
-
有可能不是。我正在使用 DynamoDB。可能应该将字段设置为
null。但是,如果不是,我认为CrudRepository在调用save()以返回最新值时基本上应该重新查询数据库。我不确定它在哪里将这些值视为null(因为它们不是 Dynamo 中的null) -
第二个问题..你在用Hibernate吗?
-
@PranjalGore 是的,我是
-
好的。因此,您需要首先获取最新的对象,这会将对象附加到持久状态。其次,更新对象(虽然它仍处于持久状态),然后最后调用 save.
标签: java spring spring-data