Cześć,
w restowej aplikacji z użyciem Spring Boota mam taką sytuację:
a) klasa User
, gdzie unikalne jest pole String email
b) klasa AbsenceCase
, zawierająca m.in. dwa pola typu User
:
User user;
User headTeacher;
Podczas zapisywania nowego case'a do tabeli absence_case
chcę uniknąć dublowania rekordów w tabeli users
i w tym celu korzystam z adnotacji na klasie User @Table(name = "users", uniqueConstraints={@UniqueConstraint(columnNames={"email"})})
Jakie adnotacje hibernate'owe powinny znaleźć się na obydwóch polach typu User
w klasie AbsenceCase
, żeby wszystko działało poprawnie i równocześnie usunięcie case'a z tabeli absence_case
nie powodowało usunięcia usera z tabeli users
?
Doszedłem to tego, że powinno to być @ManyToOne
, ale nie jestem tego do końca pewien i nie mogę dojść do tego, jak mają wyglądać opcje cascade i fetch.
Główny problem polega na tym, że dodając case'a z już istniejącymi userami Hibernate odmawia współpracy (w różny sposób w zależności od opcji podanych w adnotacji).
Dla jasności wygląd klas:
@Entity
public class AbsenceCase {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private final Long id;
private final User user;
private final User headTeacher;
private final LocalDate startDate;
private final LocalDate endDate;
...
i
@Entity
@Table(name = "users", uniqueConstraints={@UniqueConstraint(columnNames={"email"})})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private final Long id;
private final String name;
private final String surname;
private final String email;
private final String password;
private final String jobTitle;
private final Boolean isActive;
private final Position position;
private final String role;