java - 无法更新 NaturalId 字段值 : An immutable natural identifier of entity {Model} was altered from ABC to XYZ

标签 java spring-boot

将 spring-boot 与 JPA 结合使用: 尝试更新表。但当我更新 NaturalId 字段值时出现错误。

错误:嵌套异常为 org.hibernate.HibernateException:实体 com.model.Company 的不可变自然标识符已从 SOL 更改为 MEP

模型实体:

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "COMPANY_ID")
  private Long companyId;

  @NotBlank
  @NaturalId
  @Size(max = 5)
  @Column(name = "COMPANY_CODE")
  private String companyCode;    

Controller 和服务:

@PutMapping("/company")
public ResponseEntity<?> updateCompany(@Valid @RequestBody CompanyRequest companyRequest) {
    logger.info("UPDATE COMPANY :  {} ", companyRequest);

    Company company = companyService.updateCompany1(companyRequest);

    URI location = ServletUriComponentsBuilder
                .fromCurrentRequest().path("/{companyId}")
                .buildAndExpand(company.getCompanyId()).toUri();

    return ResponseEntity.created(location)
                .body(new ApiResponse(true, "Company Updated Successfully"));
}

//Services:
public Company updateCompany1(CompanyRequest companyRequest) {
        Company company = companyRepository.findById(companyRequest.getCompanyId())
                    .orElseThrow(() -> new ResourceNotFoundException("Company", "companyId", companyRequest.getCompanyId()));
        company.setCompanyCode(companyRequest.getCompanyCode());
        return companyRepository.saveAndFlush(company);
}

最佳答案

1) 在 NaturalId 上设置可变属性,2) 使您的列独一无二:

您的映射应如下所示:

@NotBlank
@NaturalId(mutable=true)
@Size(max = 5)
@Column(name = "COMPANY_CODE", unique=true)
private String companyCode; 

关于java - 无法更新 NaturalId 字段值 : An immutable natural identifier of entity {Model} was altered from ABC to XYZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56882858/

相关文章:

java - JLabel 和 JTextField 字符串比较

spring-boot - Tomcat 在 Spring Boot 中的嵌入方式

java - 如何从 url 获取 json 作为字符串?

java - 为什么在java中有不同的处理文件I/O的方法?

java - 如何在初始握手时从 Spring Websocket 检索 session ID 并在以后使用?

java - Spring Boot 和 Docker-compose 设置参数

java - 在 Spring Boot 中使用 @autowire 注释抛出 'BeanCreationException'

spring - spring boot 微服务如何生成集中式日志?

java - 在 Java + Selenium WebDriver 中提取选择的选项

java - 是否可以在java中运行shell脚本