2017-07-12 4 views
2

Ich habe ein seltsames Problem: Ich versuche, einen Benutzer in meiner DB zu speichern, dieser Benutzer hat eine Liste von Fähigkeiten . Diese Fähigkeiten sind bereits in der db mit verknüpften Kategorien und Kategorien haben Domänen verknüpft. die Struktur sieht wie folgt aus: enter image description hereorg.postgresql.util.PSQLException: FEHLER: Nullwert in Spalte "Kategorie_ID" verletzt Nicht-Null-Bedingung

, wenn ich die Liste der Fähigkeiten des Antragstellers drucken Ich habe dies:

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

und hier ist die Tabelle, die Verbindung zwischen Antragsteller und Fähigkeiten zu machen:

enter image description here

aber wenn ich versuche, den Antragsteller zu speichern, habe ich dieses Detail: Failing Zeile enthält (23, null, null, 499). Kann mir jemand erklären? Ich arbeite an einer Federanwendung mit 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

Sie sollten die Nullspalten {category_id, domain_id} ausfüllen, da es keine Nullbeschränkungen gibt. – msagala25

+0

Ja, ich weiß das mein Problem, aber es sollte automatisch sein, wenn ich einem Bewerber eine Fertigkeit hinzufüge, kann die Tabelle die ID des Bewerbers und die ID der Fertigkeit finden, aber nicht die ID der Kategorie, die bereits existiert. –

+0

sollten Sie Code hinzufügen, der für Ihr Problem relevant ist, damit wir Ihnen helfen können. – msagala25

Antwort

1

Ich bin erfolgreich mit @ElementCollection Annotation auf Fähigkeiten.

Verwandte Themen