Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.postgresql.util.PSQLException:错误:列“中的值为空”;类别“U id”;违反非空约束_Java_Spring_Postgresql_Jpa_Parent Child - Fatal编程技术网

Java org.postgresql.util.PSQLException:错误:列“中的值为空”;类别“U id”;违反非空约束

Java org.postgresql.util.PSQLException:错误:列“中的值为空”;类别“U id”;违反非空约束,java,spring,postgresql,jpa,parent-child,Java,Spring,Postgresql,Jpa,Parent Child,我有一个奇怪的问题:我试图在我的数据库中保存一个用户,这个用户有一个技能列表。这些技能已经存在于具有链接类别的数据库中,并且类别具有链接域。结构如下所示: 当我打印申请人的技能列表时,我有以下几点: skills=[Skill{categories=[Category{domains=[Domain{id=4, name=DevOps}], id=13, name=BackEnd}], id=23, name=Java}, Skill{categories=[Category{domains=[

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

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

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}],
以下表格显示了申请人与技能之间的联系:

但当我试图保存申请者时,我有一个Détail:失败的行包含(23,null,null,499)。有人能给我解释一下吗?我正在使用jpa注释开发一个spring应用程序

编辑1:

应用内容:

@Entity
@Table(name = "ATS_APPLICANT")
public class ApplicantEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "home", unique = false, nullable = true)
    private Boolean home;

    @Column(name = "anonymous", unique = false, nullable = true)
    private Boolean anonymous;

    @Enumerated(EnumType.STRING)
    @Column(name = "job_type")
    private JobType jobType;

    @Column(name = "min_salary", unique = false, nullable = true)
    private Integer minSalary;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(unique = true)
    private UserEntity user;

    @OneToMany(targetEntity = ApplicantWorkExperienceEntity.class, cascade = CascadeType.ALL)
    private List<ApplicantWorkExperienceEntity> applicantWorkExperiences = new ArrayList<ApplicantWorkExperienceEntity>();

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    @JoinTable(name = "ATS_APPLICANT_SKILL", joinColumns = @JoinColumn(name = "applicant_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"))
    private List<SkillEntity> skills = new ArrayList<SkillEntity>();

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "ATS_APPLICANT_LOCATION", joinColumns = @JoinColumn(name = "applicant_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "location_id", referencedColumnName = "id"))
    private List<LocationEntity> locations = new ArrayList<LocationEntity>();

通过在skills上使用@ElementCollection注释,我成功了。

您应该填写空列{category\u id,domain\u id}因为它没有空的约束。是的,我知道这是我的问题,但当我向申请人添加一项技能时,它应该是自动的。表格可以找到申请人的id和技能的id,但不能找到已经存在的类别的id。您应该添加一些与您的问题相关的代码,以便我们可以提供帮助。@LKTN.25刚刚添加了实体,请查看编辑。尝试从映射注释中删除
referencedColumnName=“id”
。也请添加DomainEntity
@Entity
@Table(name = "ATS_SKILL")
public class SkillEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 1, max = 42)
    @Column(name = "name", length = 42, nullable = false, unique = true)
    private String name;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "ATS_SKILL_CATEGORY", joinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id"))
    private List<CategoryEntity> categories = new ArrayList<CategoryEntity>();
@Entity
@Table(name = "ATS_CATEGORY")
public class CategoryEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 1, max = 42)
    @Column(name = "name", length = 42, nullable = false, unique = true)
    private String name;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "ATS_CATEGORY_DOMAIN", joinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "domain_id", referencedColumnName = "id"))
    private List<DomainEntity> domains = new ArrayList<DomainEntity>();
@Entity
@Table(name = "ATS_DOMAIN")
public class DomainEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 1, max = 42)
    @Column(name = "name", length = 42, nullable = false, unique = true)
    private String name;