You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.3.x复合键测试失败,3.2.x正常,是否为预期行为?

Spring Boot 3.3.x中Spring Data JPA复合键测试失败问题

问题描述

我有一个包含复合键ProductRatingId(由CustomerId和ProductId组成)的ProductRating实体,对应的测试在Spring Boot 3.2.0中可正常通过,但升级到Spring Boot 3.3.2后测试失败。

测试代码如下:

@Test
public void testCreateProductRating() {
    // 创建并保存Product
    Product product = Product.builder()
            .name("Test Product")
            .build();
    product = productRepository.save(product);

    // 创建并保存Customer
    Customer customer = Customer.builder()
            .name("Test Customer")
            .build();
    customer = customerRepository.save(customer);

    // 创建ProductRating
    ProductRating productRating = ProductRating.builder()
            .id(new ProductRatingId()) // 在Spring Boot 3.3.x中此处导致失败
            .customer(customer)
            .product(product)
            .rating(10)
            .build();

    productRatingRepository.save(productRating);

    // 断言评分已正确保存
    assertThat(productRating).isNotNull();
    assertThat(productRating.getId().getProductId()).isNotNull();
    assertThat(productRating.getId().getCustomerId()).isNotNull();
    assertThat(productRating.getRating()).isEqualTo(10);
    assertThat(productRating.getCustomer().getName()).isEqualTo("Test Customer");
    assertThat(productRating.getProduct().getName()).isEqualTo("Test Product");
}

调查结果

  • 若在保存ProductRating前,显式给ProductRatingId中的customerId和productId赋值,测试可通过,但这种操作在Spring Boot 3.2.x中并非必需。
  • 若将保存操作的返回值重新赋值给productRating变量,测试在Spring Boot 3.3.2中也可通过:
productRating = productRatingRepository.save(productRating);

调整后,ProductRatingId中的customerId和productId字段会被正确填充,断言全部通过。

疑问

这种行为在Spring Boot 3.3.x中是否属于预期?Hibernate或Spring Data JPA在两个版本间的哪些变更导致了这个问题?

补充信息

  • Spring Boot 3.2.0版本下测试执行通过,Spring Boot 3.3.2版本下相同测试执行失败
  • 相关示例代码可在对应仓库的不同分支中查看

内容的提问来源于stack exchange,提问作者henriquels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:05:17