java - 如何使用 spring data jpa 仅更新模型中的传入字段?

标签 java spring hibernate spring-boot spring-data-jpa

我正在使用 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 或类似的东西来实现更新(更新插入之类的东西)。当前使用存储库的保存方法在内部使用 primaryKey 值更新模型,但将缺失字段的值设置为 null。我希望这些字段保持不变。

主要问题是:有数百个模型,每个模型有大约 10-15 个字段,明确检查每个字段并更新所有模型将是一场噩梦。

我还检查了 @DynamicUpdate 注释,但它似乎适用于优化生成的 sql 的显式设置。

如果有任何关于此的想法,我将不胜感激。

最佳答案

通常合并会为你工作,因为你得到了分离的副本——一个你从 JSON 获得的副本和一个持久的副本(来自存储库)。 Merge 正是这样做的——使用分离属性的值更新持久属性,如果没有它会创建它(我不确定这部分是否是可取的)。仍然让它自动你失去了你自己编写它的灵 active 。

对于 JPA,合并方法是 EntityManager 的一部分。所以你需要注入(inject)它并像 em.merge(detachedEntity); 一样调用它;

除此之外还有一些库可以做到这一点,但我没有使用过。需要一些编码的最佳解决方案是编写一个方法来手动更新字段;)

关于java - 如何使用 spring data jpa 仅更新模型中的传入字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50604647/

相关文章:

java - 在 java 中,如果我想在一个类中使用 10 个接口(interface),那么它会变得困难吗?

Spring 启动 : How to specify the PasswordEncoder?

Spring 和 hibernate : Function of annotatedClasses and packagesToScan

spring - Jackson:从序列化中排除@Entity 类上的每个惰性集合

java - 实现条件 for 循环

java - 如何获取 src/main/resources 文件夹中文件的路径?

java - 如何禁用对 jamon 管理页面的公共(public)访问?

java - hibernate/JPA : How to do the query that return the attribute of the DAO?

java - 在spring mvc中上传图片

Java GUI 编译没有错误,但有时什么都不显示