Редактирование моделей 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