Редактирование моделей java rest

Есть 2 модели : Опыт работы:

@Entity
@Data
public class WorkExperience {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String company;
    private String jobTitle;
    @Column(nullable = false)
    @JsonFormat(pattern = "dd-MM-yyyy")
    private LocalDate dateStart;

    @Column(nullable = false)
    @JsonFormat(pattern = "dd-MM-yyyy")
    private LocalDate dateFinish;

    @Column(nullable = false)
    private String description;

    @ManyToOne
    @JoinColumn(name = "profile_id")
    private Profile profile;

    @ManyToMany
    @JoinTable(
            name = "work_experience_primary_skills",
            joinColumns = @JoinColumn(name = "work_experience_id"),
            inverseJoinColumns = @JoinColumn(name = "node_id")
    )
    private Set<Node> primarySkills = new HashSet<>();

    @ManyToMany
    @JoinTable(
            name = "work_experience_secondary_skills",
            joinColumns = @JoinColumn(name = "work_experience_id"),
            inverseJoinColumns = @JoinColumn(name = "node_id")
    )
    private Set<Node> secondarySkills = new HashSet<>();


}

Скиллы на этой работе (sql,git,java и т.д.)

@Entity
@Data
public class Node {
    @Id
    @SequenceGenerator(name = "node_seq2",
            sequenceName = "node_sequence2",
            initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "node_seq2")
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false, unique = true)
    private String slug;

    @ManyToMany(mappedBy = "knowledge", cascade = CascadeType.ALL)
    private Set<Profile> profiles = new HashSet<>();

    @ManyToMany(mappedBy = "primarySkills", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    private Set<WorkExperience> primarySkillExperiences = new HashSet<>();

    @ManyToMany(mappedBy = "secondarySkills", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    private Set<WorkExperience> secondarySkillExperiences = new HashSet<>();

}

При создании или редактировании Я присылаю весь WorkExperienceDTO и сохраняю в бд, так же проверяя его Node. Если он уже записани в бд, то просто связываю его с моей моделю, а если нет, то создаю и связываю. Правильно ли так делать вручную или Hibernate может это проверять за меня. Пример кода:

 public WorkExperience createWorkExperience(WorkExperienceDTO createDTO) {
        WorkExperience workExperience = mapDTOToWorkExperience(createDTO);

       
        workExperience.setPrimarySkills( updateSkills(createDTO.getPrimarySkills()));
        workExperience.setSecondarySkills(updateSkills(createDTO.getSecondarySkills()));

        WorkExperience createdWorkExperience = workExperienceRepository.save(workExperience);
        return createdWorkExperience;
    }

    private Set<Node>  updateSkills( Set<NodeDTO> newSkillDTOs) {
        Set<Node> nodeList = new HashSet<>();
        for (NodeDTO skillDTO : newSkillDTOs) {
            Node skill;
            try {
                skill = nodeService.getNodeBySlug(skillDTO.getSlug());
            } catch (ResponseStatusException e) {
                skill = nodeService.createNode(skillDTO);
           }
            nodeList.add(skill);
        }
        return nodeList;
    }

И если будет еще какая-то сущность Profile, которая включает в себя список WorkExpirience, То не слишком ли сложная система с редактированием сущностей? Каждый раз придется присылать огромный json Profile, в котором я должен проверять или уже такие сущности есть, а если нет, то создавать? Если что Node - уникальные и не зависят от WorkExpirience


Ответы (0 шт):