【问题标题】:What is best way to JPA repository update?JPA 存储库更新的最佳方法是什么?
【发布时间】:2019-12-24 00:32:50
【问题描述】:

我在这里扩展我的问题:Spring Data JPA Auditing not working for the JpaRepository update method with @Modifying annotation, why?。我正在使用Spring Boot + Spring Data JPA

我已经开发了更新

@Modifying(clearAutomatically = true)
@Query("UPDATE Student s SET s.studentDescription=:stuDesc, s.studentId=:studentId, s.sivisionCode=:cd, "
        + "s.status=:status, s.firstName=:firstName, s.lastName=:lastName, s.email=:email WHERE s.studentName=:stuName")
void updateStudent(@Param("stuName") String studentName,
                    @Param("stuDesc") String studentDescription,
                    @Param("studentId") String studentId,
                    @Param("cd") String cd,
                    @Param("firstName") String firstName,
                    @Param("lastName") String lastName,
                    @Param("email") String email,
                    .........
                    ...........
                    .........
                    ..........
                    // 8 more parameters here
                    ...........
                    @Param("status") String status); 

注意:我知道代码是这样工作的,它只更新我传递的那些字段。但我想了解在这里更新学生记录的最佳方式。

获取学生记录并设置更新值和 save() 的另一种方法。这会是一个好习惯吗?有什么最好的方法吗?

【问题讨论】:

    标签: spring spring-boot spring-data-jpa jpa-2.2 hibernate-6.x


    【解决方案1】:

    Hibernate 提供注解@DynamicUpdate 来仅更新实体的已修改字段。

    【讨论】:

    • 我正在使用 Spring Data JPA 存储库查询来处理所有类型的 CRUD 相关查询。您仍然想建议使用 @DynamicUpdate 吗?此外,为了更新数据,我使用 DTO/Resource 类并使用 HATEOAS 的 ResourceAssesmbler 将其转换为实体类。有什么建议吗?
    • @DynamicUpdate 完全符合您的要求;仅保存实体的修改字段。但是,请注意存在性能成本。要将 DTO 映射到实体,您可能需要编写自己的自定义方法,从数据库加载实体,仅将修改后的字段映射到实体。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2022-01-11
    • 1970-01-01
    • 2013-05-23
    • 2020-04-28
    相关资源
    最近更新 更多