【发布时间】:2018-11-09 07:21:48
【问题描述】:
我正在使用 Spring data jpa 进行持久化。 说,我必须更新一个模型。 此模型具有“n”个字段以及一个主键。
{
"some_model":{
"id":"5527716",
"field_one": "44248156",
"field_two": "44248156",
"field_three": "44248156",
"field_four": "44248156",
"field_five": "44248156",
"field_six": "44248156",
"field_seven": "44248156",
"field_eight": "44248156",
"field_nine":"65037768"
}
}
考虑到上面的 json 作为我的模型的表示,我只想更新 json 中传入的那些字段(主键是 Id,它将始终存在)。有什么方法可以实现,而无需显式检查每个字段并进行设置?
假设我收到如下请求:
{
"some_model":{
"id":"5527716",
"field_one": "44248156",
"field_two": "44248156",
"field_three": "44248156",
"field_eight": "44248156",
"field_nine":"65037768"
}
}
我想只使用 repository.save 或类似的东西来实现更新(升级插入之类的东西)。目前使用存储库的 save 方法在内部使用 primaryKey 值更新模型,但将缺失字段的值设置为 null。我希望这些字段保持不变。
主要问题是:有数百个模型,每个模型大约有 10-15 个字段,显式检查每个字段并更新所有模型将是一场噩梦。
我还检查了@DynamicUpdate 注释,但它似乎适用于优化生成的 sql 的显式设置。
我将不胜感激有关此的任何想法。
【问题讨论】:
-
您想忽略具有空值的属性吗?
-
@surendrapanday 是的
-
@surendrapanday 是的,我也检查了那个答案。普遍的共识似乎是,我们不得不求助于明确地做或写我不想做的 hql。
-
简单的回答:这是不可能的。因为在反序列化后,如果缺少字段,则值为 null。 Java 是一种静态类型语言,不能很好地满足您的要求。
标签: java spring hibernate spring-boot spring-data-jpa