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

Spring Boot向PostgreSQL插入数据异常:仅自增ID生效其余字段为Null

解决POST请求插入PostgreSQL时仅ID字段赋值其他字段为Null的问题

核心原因

你的Question实体类仅添加了@AllArgsConstructor和@NoArgsConstructor Lombok注解,但未提供字段的getter/setter方法。Spring MVC通过@RequestBody解析JSON请求体时,无法为私有字段赋值,最终导致插入数据库时只有自动生成的ID有值,其余字段为Null。

解决方案

1. 为实体类添加Lombok的@Data注解

修改Question实体类,添加@Data注解,它会自动生成所有字段的getter、setter方法,以及toString、equals、hashCode等必要方法:

package com.infosys.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "questions")
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "question_id")
    private Long questionId;
    @Column(name = "question")
    private String question;
    @Column(name = "quiz_id")
    private Long quizId;
}

2. 匹配请求体字段与实体类属性名

确保Postman发送的JSON请求体字段名和实体类属性名完全一致,示例正确请求体:

{
    "question": "测试问题内容",
    "quizId": 1
}

注:JPA会自动处理驼峰属性名到数据库下划线列名的转换,因此请求体用quizId对应数据库的quiz_id是正确的。

3. 修正application.properties配置冲突

配置中spring.jpa.hibernate.ddl-auto=none与spring.jpa.generate-ddl=true存在冲突,建议统一调整为:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:postgresql://localhost:5432/micro_zt
spring.datasource.username=postgres
spring.datasource.password=password
server.port = 8080

update模式会根据实体类自动同步数据库表结构,避免手动建表时的字段匹配问题。

4. 修正控制器方法权限

将控制器中create方法的private修饰符改为public,符合Spring MVC规范:

@PostMapping
public Question create(@RequestBody Question question) {
    return qService.add(question);
}

验证步骤

  1. 重启Spring Boot应用
  2. 在Postman中发送POST请求到http://localhost:8080/question,携带正确JSON请求体
  3. 查询PostgreSQL的questions表,确认所有字段已正确赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:21:19