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

Spring Boot中@Embedded/@Embeddable数据无法存入数据库的问题

解决Spring Boot中@Embedded嵌套对象无法存储的问题

以下是针对你遇到的嵌套对象存储失败问题的具体排查和修改方案:


1. 补全实体类的Getter/Setter方法

Spring通过Getter/Setter方法完成请求体到实体对象的属性绑定,缺失这些方法会导致字段无法被赋值,最终出现null值。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @Embedded
    private Address address;

    // 必须添加所有字段的Getter/Setter
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }
}

@Embeddable
public class Address {
    private String street;
    private String city;

    // 同样需要补全Getter/Setter
    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }
    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }
}

2. 控制器方法添加@RequestBody注解

如果POST接口没有用@RequestBody标记参数,Spring无法将JSON请求体解析为User对象,导致传入的对象属性全为null。

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public User createUser(@RequestBody User user) { // 必须添加@RequestBody
        return userService.saveUser(user);
    }
}

3. 验证服务层与仓库层的保存逻辑

确保服务层直接传递完整的User对象到仓库,不要在中间环节错误重置字段:

// 仓库接口需正确继承JpaRepository
public interface UserRepository extends JpaRepository<User, Long> {}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User saveUser(User user) {
        // 直接保存传入的对象,不要额外修改或创建空对象
        return userRepository.save(user);
    }
}

4. 检查H2数据库配置

确保application.yml中开启了自动建表和SQL日志,方便排查数据是否被写入:

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driverClassName: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: update # 自动创建/更新表结构
    show-sql: true # 打印SQL语句,验证插入操作是否执行
  h2:
    console:
      enabled: true # 开启H2控制台,可直接查看数据库数据

5. 确认请求JSON格式正确性

发送的POST请求体必须符合嵌套对象的结构,字段名需与实体类一致:

{
    "name": "张三",
    "address": {
        "street": "朝阳路123号",
        "city": "北京"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:30:41