Cześć, mam problem z hibernate. Mam encje User i Skill, relacja wiele do wielu. Baza to postgresql.
User:
@Entity
@Table(name = "user")
@Data
public class User extends StampedModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
private String description;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(
name="users_skills",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id")
)
private List<Skill> skills;
Skill:
@Entity
@Table(name = "skills")
@Data
public class Skill {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToMany(mappedBy = "skills")
List<User> users;
I chciałbym zrobić tak, że podczas dodawania nowego usera sprawdzam czy skill istnieje w bazie i jeśli istnieje to nie tworzę go kolejny raz tylko używam tego co już jest w bazie i przypisuje go do użytkownika a jeżeli nie ma takiego to chcę go utworzyć i przypisać do użytkownika.
Obecnie cały czas tworzą się nowe rekordy w bazie co powoduje duplikaty. Próbowałem poprzez unique ale leci wtedy wyjątek i złapać go to nie problem tylko jak go obsłużyć żeby robił to co wyżej napisałem?