java - 如何仅更新字段的子集并更新存储库?

标签 java hibernate spring-boot jpa postman

我正在制作一个 Spring Boot 应用程序,我希望通过我的服务和 Controller 更新数据库中的现有条目。在我的服务层中,我有以下方法。因此,我检索与 caseID 关联的字段,创建一个模型映射器,将实体对象类映射到我的 VO,然后将检索到的数据映射到我的 DTO。然后我保存我的存储库。目的是仅添加我在请求消息中指定的字段,即如果我只想更新 20 个字段中的 1 个字段,它将更新此字段并保持其余字段不变。下面的代码运行成功,但是我在 postman 的请求消息中指定的字段不会在数据库中更新。为什么是这样?我尝试映射不同的对象并将不同的变量保存到存储库,但似乎没有任何内容可以更新数据库。

public StoredOutboundErrorCaseVO updateCase(OutboundErrorCaseVO outboundErrorCaseVO, Long caseNumber) {
    OutboundErrorCaseData existingCaseData = ErrorCaseDataRepository.findById(caseNumber).get();
    ModelMapper mm = new ModelMapper();
    mm.getConfiguration().setAmbiguityIgnored(true);
    OutboundErrorCaseData uiOutboundErrorCaseData = mm.map(outboundErrorCaseVO,
            OutboundErrorCaseData.class);
    mm.map(existingCaseData, uiOutboundErrorCaseData);
    ErrorCaseDataRepository.save(uiOutboundErrorCaseData);
    return mm.map(uiOutboundErrorCaseData, StoredOutboundErrorCaseVO.class);
}

Controller - 为简洁起见,省略了代码,POST 方法(我通常使用 PUT 进行更新,但我相信我仍然可以使用 POST)

    StoredOutboundErrorCaseVO updatedCase = outboundErrorService.updateCase(outboundErrorCaseVO,
            caseNumber);

repo 协议(protocol)

    @Repository
public interface OutboundErrorCaseDataRepository extends JpaRepository<OutboundErrorCaseData, Long> {

最佳答案

您正在获取数据并将其传递到 existingCaseData并保存uiOutboundErrorCaseData 。所以我的猜测是 Hibernate 正在使用新的 Id 和更新的值将一个新对象添加到数据库中。这当然取决于您的模型定义。特别是id

我还认为 Hibernate 不会让你保存 uiOutboundErrorCaseData如果 Hibernate Session 中已经有一个与该 id 关联的对象,则具有相同的 id。那么,你为什么不更新existingCaseData使用新值并将其保存回来。

关于java - 如何仅更新字段的子集并更新存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327414/

相关文章:

java - Hibernate调用sql server存储过程在 '@P0'附近抛出错误语法

java - WebTestClient - 使用 Spring Boot 和 Webflux 的 CORS

java - 使用 Jenkins 在构建时修改 web.xml 中的 <display-name>

java - 将 Jersey 项目转换为标准 Servlet 应用程序的起点

hibernate - 在 Hibernate 中为 DB2 和 HSQLDB 映射名为 "group"的表

Spring 在具有通配符 Controller 路由的同时提供静态内容

java - 在查询、jpa 存储库和 spring boot 中使用非硬编码值

java - LDAP 最佳实践

java - 在 REST 响应中发送图像时请求 header 太大

mysql - Spring MVC、Hibernate、MySQL(数据库关系)