org.postgresql.util.PSQLException:错误:列“category_id”中的空值违反了非空约束

Vin*_*IAS 5 java postgresql spring jpa parent-child

我有一个奇怪的问题:我正在尝试在我的数据库中保存一个用户,该用户有一个技能列表。这些技能已经存在于具有链接类别的数据库中,并且类别具有链接域。结构如下:在此输入图像描述

\n\n

当我打印申请人的技能列表时,我有以下内容:

\n\n
skills=[Skill{categories=[Category{domains=[Domain{id=4, name=DevOps}], id=13, name=BackEnd}], id=23, name=Java}, Skill{categories=[Category{domains=[Domain{id=4, name=DevOps}], id=13, name=BackEnd}], id=24, name=C}],\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是申请人和技能之间联系的表格:

\n\n

在此输入图像描述

\n\n

但是当我试图保存申请人时,我有这个 D\xc3\xa9tail :失败行包含 (23, null, null, 499)。有人可以解释一下吗?我正在使用 jpa 注释开发 spring 应用程序。

\n\n

编辑1:

\n\n

申请人实体:

\n\n
@Entity\n@Table(name = "ATS_APPLICANT")\npublic class ApplicantEntity implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.AUTO)\n    private Long id;\n\n    @Column(name = "home", unique = false, nullable = true)\n    private Boolean home;\n\n    @Column(name = "anonymous", unique = false, nullable = true)\n    private Boolean anonymous;\n\n    @Enumerated(EnumType.STRING)\n    @Column(name = "job_type")\n    private JobType jobType;\n\n    @Column(name = "min_salary", unique = false, nullable = true)\n    private Integer minSalary;\n\n    @OneToOne(cascade = CascadeType.ALL)\n    @JoinColumn(unique = true)\n    private UserEntity user;\n\n    @OneToMany(targetEntity = ApplicantWorkExperienceEntity.class, cascade = CascadeType.ALL)\n    private List<ApplicantWorkExperienceEntity> applicantWorkExperiences = new ArrayList<ApplicantWorkExperienceEntity>();\n\n    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)\n    @JoinTable(name = "ATS_APPLICANT_SKILL", joinColumns = @JoinColumn(name = "applicant_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"))\n    private List<SkillEntity> skills = new ArrayList<SkillEntity>();\n\n    @ManyToMany(cascade = CascadeType.ALL)\n    @JoinTable(name = "ATS_APPLICANT_LOCATION", joinColumns = @JoinColumn(name = "applicant_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "location_id", referencedColumnName = "id"))\n    private List<LocationEntity> locations = new ArrayList<LocationEntity>();\n
Run Code Online (Sandbox Code Playgroud)\n\n

技能实体:

\n\n
@Entity\n@Table(name = "ATS_SKILL")\npublic class SkillEntity implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.AUTO)\n    private Long id;\n\n    @NotNull\n    @Size(min = 1, max = 42)\n    @Column(name = "name", length = 42, nullable = false, unique = true)\n    private String name;\n\n    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)\n    @JoinTable(name = "ATS_SKILL_CATEGORY", joinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id"))\n    private List<CategoryEntity> categories = new ArrayList<CategoryEntity>();\n
Run Code Online (Sandbox Code Playgroud)\n\n

类别实体:

\n\n
@Entity\n@Table(name = "ATS_CATEGORY")\npublic class CategoryEntity implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.AUTO)\n    private Long id;\n\n    @NotNull\n    @Size(min = 1, max = 42)\n    @Column(name = "name", length = 42, nullable = false, unique = true)\n    private String name;\n\n    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)\n    @JoinTable(name = "ATS_CATEGORY_DOMAIN", joinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "domain_id", referencedColumnName = "id"))\n    private List<DomainEntity> domains = new ArrayList<DomainEntity>();\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑2:\nDomainEntity:

\n\n
@Entity\n@Table(name = "ATS_DOMAIN")\npublic class DomainEntity implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.AUTO)\n    private Long id;\n\n    @NotNull\n    @Size(min = 1, max = 42)\n    @Column(name = "name", length = 42, nullable = false, unique = true)\n    private String name;\n
Run Code Online (Sandbox Code Playgroud)\n

Vin*_*IAS 1

我通过在技能上使用 @ElementCollection 注释取得了成功。