2017-07-12 2 views
2

私は奇妙な問題があります。私は自分のDBにユーザを保存しようとしています。このユーザはスキルのリストを持っています。それらのスキルは既にリンクされたカテゴリを持つdbにあり、カテゴリはリンクされたドメインを持っています。org.postgresql.util.PSQLException:ERROR:カラム "category_id"のnull値がnullでない制約に違反しています

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}], 

、ここでは、申請者とスキルの間のリンクを作成するテーブルである:

enter image description here私はこれを持って申請者からのスキルのリストを印刷するときenter image description here

:構造は次のようになります

私は申請者を保存しようとしていますが、私はこのDétailを持っています:失敗行には(23、null、null、499)が含まれています。誰かが私を説明できますか?私はjpa annotaionsを使って春のアプリケーションに取り組んでいます。

EDIT 1:

ApplicantEntity:

@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>(); 

SkillEntity:

@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>(); 

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>(); 

EDIT 2: 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; 
+0

ヌルの列{category_id、domain_id}には空白がないため、入力してください。 – msagala25

+0

はい私はこの問題を知っていますが、申請者にIDを1つ追加し、スキルのIDを見つけることはできますが、すでに存在するカテゴリのIDは認識できません。 –

+0

問題に関連するコードを追加してください。 – msagala25

答えて

1

スキルで@ElementCollectionアノテーションを使用すると成功します。

関連する問題