Spring JPA не вставляет атрибут «один ко многим» в базу данных

#java #spring-boot #jpa

Вопрос:

Я работаю над проектом системы управления персоналом, и сейчас я внедряю систему резюме, в которую люди могут добавлять свои резюме.

В соответствии с предварительными условиями люди должны иметь возможность добавлять языки,технологии,школы и опыт в свои резюме. Поэтому я создал таблицы для каждого из них, а также таблицу резюме. Я использовал первичный ключ таблицы CV в качестве внешнего ключа в других таблицах.

Я использовал отношения OneToMany, чтобы создать полную сущность резюме. Это работает правильно, когда я просто читаю его, но когда я пытаюсь опубликовать резюме, оно не работает.

Я публикую резюме в этом формате, используя Swagger 2:

 {
  "coverLetter": "string",
  "githubLink": "string",
  "id": 0,
  "jobseeker": {
    "birthOfYear": 0,
    "email": "string",
    "firstName": "string",
    "id": 0,
    "jobseekerCvs": [
      null
    ],
    "lastName": "string",
    "nationalIdentity": "string",
    "password": "string",
    "verified": true
  },
  "jobseekerExperiences": [
    {
      "companyName": "string",
      "endYear": 0,
      "id": 0,
      "position": "string",
      "startYear": 0
    }
  ],
  "jobseekerLanguages": [
    {
      "id": 0,
      "level": "string",
      "name": "string"
    }
  ],
  "jobseekerSchools": [
    {
      "graduateYear": 0,
      "id": 0,
      "name": "string",
      "startYear": 0
    }
  ],
  "jobseekerTechnologies": [
    {
      "id": 0,
      "name": "string"
    }
  ],
  "linkedinLink": "string"
}
 

Но я получаю такой результат, когда использую конечную точку GetAll:

 "id": 13,
"jobseeker": {
        "id": 0,
        "email": "string",
        "password": "string",
        "firstName": "string",
        "lastName": "string",
        "nationalIdentity": "string",
        "birthOfYear": 0,
        "verified": false
      },
      "githubLink": "string",
      "linkedinLink": "string",
      "coverLetter": "string",
      "jobseekerSchools": [],
      "jobseekerLanguages": [],
      "jobseekerExperiences": [],
      "jobseekerTechnologies": []
    }

 

I guess Spring JPA checks the id that come and if there is no entry with that id it just ignores it.

Here is the related classes:

CV Entity Class

 
    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Table(name="jobseeker_cvs")
    public class JobseekerCv {
        
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id")
        private int id;

        @ManyToOne
        @JoinColumn(name="jobseeker_id")
        private Jobseeker jobseeker;
        
        @Column(name="github_link")
        private String githubLink;
        
        @Column(name="linkedin_link")
        private String linkedinLink;
        
        @Column(name="cover_letter")
        private String coverLetter;
        
        @OneToMany(mappedBy="jobseekerCv", fetch = FetchType.LAZY)
        private List<JobseekerSchool> jobseekerSchools;
        
        @OneToMany(mappedBy="jobseekerCv", fetch = FetchType.LAZY)
        private List<JobseekerLanguage> jobseekerLanguages;
        
        @OneToMany(mappedBy="jobseekerCv", fetch = FetchType.LAZY)
        private List<JobseekerExperience> jobseekerExperiences;
        
        @OneToMany(mappedBy="jobseekerCv", fetch = FetchType.LAZY)
        private List<JobseekerTechnology> jobseekerTechnologies;
        
        
    }
 

Experince Class, they all have a same system .

 
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name="jobseeker_job_experiences")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler","jobseekerCv"})
public class JobseekerExperience {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;
    
    @ManyToOne
    @JoinColumn(name="cv_id")
    @JsonProperty(access = com.fasterxml.jackson.annotation.JsonProperty.Access.WRITE_ONLY)
    private JobseekerCv jobseekerCv;
    
    @NotNull
    @NotBlank
    @Column(name="company_name")
    private String companyName;
    
    @NotNull
    @NotBlank
    @Column(name="position")
    private String position;
    
    @NotNull
    @NotBlank
    @Column(name="start_year")
    private short startYear;
    
    @Column(name="end_year")
    private short endYear;

}

 

Service method which adds to the database

 @Override
    public Result add(JobseekerCv jobseekerCv) {

        this.jobseekerCvDao.save(jobseekerCv);
        return new SuccessResult();
    }
 

Способ управления покоем

 @PostMapping("/add")
    public ResponseEntity<?> add(@Valid @RequestBody JobseekerCv jobseekerCv) {
        
        return ResponseEntity.ok(this.jobseekerCvService.add(jobseekerCv));
        
    }
 

Это мой первый вопрос, так что, если что-то не так, извиняюсь. Заранее спасибо.