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

Postman提交数据遇ORA-01400:无法向U_ID插入NULL(JPA一对多映射)

问题分析

错误ORA-01400: cannot insert NULL into ("SYSTEM"."USER_DETAIL"."U_ID")明确说明插入USER_DETAIL表时U_ID字段为NULL,而该字段是主键(带非空约束)。结合实体类代码,问题核心是主键字段未配置自动生成策略,且提交数据时未传入u_id有效值。

解决方案

1. 给UserDetails主键配置Oracle序列生成策略

修改UserDetails.java的u_id字段注解,让JPA自动通过Oracle序列生成主键值:

import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.List;
import javax.persistence.*;

@Entity
@Table(name = "User_Detail")
public class UserDetails {    
    @Id
    @Column(name="user_id")
    // 绑定Oracle序列生成主键
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
    @SequenceGenerator(name = "user_seq", sequenceName = "USER_DETAIL_SEQ", allocationSize = 1)
    int u_id;    
    String u_name;
    String u_email;
    int mob_no;
    String gender;
    int age;
    String city;
    String State;
    int pincode;
    String address;
    String password;
    
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name="fk_user_id",referencedColumnName = "user_id")
    private List<Vehicle> vehicle;    
}

2. 手动创建Oracle序列(若JPA未自动生成)

如果你的JPA配置未开启自动创建数据库对象,需手动在Oracle中执行:

CREATE SEQUENCE USER_DETAIL_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;

3. 若不使用自动生成,确保Postman请求包含u_id

如果需要手动指定主键值,Postman提交的JSON请求体必须包含u_id字段,示例:

{
    "u_id": 1001,
    "u_name": "张三",
    "u_email": "zhangsan@example.com",
    "mob_no": 13800138000,
    "gender": "男",
    "age": 30,
    "city": "北京",
    "State": "北京",
    "pincode": 100000,
    "address": "朝阳区XX路",
    "password": "123456",
    "vehicle": [
        {
            "vid": 1,
            "vname": "特斯拉",
            "vmodel": "Model 3",
            "showroomprice": "250000",
            "onroadprice": "260000",
            "aadharcardno": 123456789012,
            "pancardno": "ABCDE1234F",
            "photo": true,
            "employmenttypes": "全职",
            "salaryslip": true,
            "annualsalary": 200000,
            "existingemi": false
        }
    ]
}

4. 可选:同步优化Vehicle实体主键

Vehicle的vid字段同样未配置自动生成策略,长期使用易出现同类问题,建议同步修改:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="Vehicle_detail")
public class Vehicle {    
    @Id
    @Column(name="vehicle_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "vehicle_seq")
    @SequenceGenerator(name = "vehicle_seq", sequenceName = "VEHICLE_DETAIL_SEQ", allocationSize = 1)
    private int vid;    
    private String vname;
    private String vmodel;
    private String showroomprice;
    private String onroadprice;
    private long aadharcardno;
    private String pancardno;
    private boolean photo;
    private String employmenttypes;
    private boolean salaryslip;
    private int annualsalary;
    private boolean existingemi;
}

对应的Oracle序列创建语句:

CREATE SEQUENCE VEHICLE_DETAIL_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;

验证

修改后重启应用,再次通过Postman提交数据,即可解决主键NULL的插入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:01:01