Mam taki problem, że w momencie w którym zapisuje nowego użytkownika do bazy i dodaje mu listę ról, to przypisuję obiektom UserRole id istniejących już w bazie ról. Niestety działa to tak, że zamiast przypisać istniejącą rolę z podanym id, hibernate tworzy nową rolę w bazie z innym id.
Da się to jakoś ogarnąć, czy muszę raczej w trakcie tworzenia usera, pobrać sobie najpierw te role z bazy i przypisać je do userrole przed zapisem?
I sorki, że niejasno to tu może opisałem ale niewygodnie mi się tu pisze, nie umiem nawet okienka tekstowego powiększyć.
@Murasame: By hibernate nie tworzył nowych obiektów Role, trzeba użyć polecenia merge() w celu połączenia istniejącego obiektu Role z bazą danych. Następnie trzeba ustawić cascade na merge() dla encji UserRole, aby hibernate przeprowadził tę operację automatycznie w trakcie tworzenia usera i dodawania listy ról.
60zl za brak reklam na Instagramie - kogoś #!$%@? xD Ja rozumiem te wszystkie opłaty za serwisy streamingowe itd, ale #!$%@? 60zl za jakiegos Instagrama, żeby sobie bez reklam posty i story oglądać? #instagram #facebook
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "userid", nullable = false)
private Set<UserRole> userRoles;
A ta encja userRole wygląda tak:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "roleid")
private Role role;
@Column(name = "roleid", insertable = false, updatable = false)
private Integer roled;
@Column(name = "userid", insertable = false, updatable = false)
private Integer userId;
Mam taki problem, że w momencie w którym zapisuje nowego użytkownika do bazy i dodaje mu listę ról, to przypisuję obiektom UserRole id istniejących już w bazie ról. Niestety działa to tak, że zamiast przypisać istniejącą rolę z podanym id, hibernate tworzy nową rolę w bazie z innym id.
Da się to jakoś ogarnąć, czy muszę raczej w trakcie tworzenia usera, pobrać sobie najpierw te role z bazy i przypisać je do userrole przed zapisem?
I sorki, że niejasno to tu może opisałem ale niewygodnie mi się tu pisze, nie umiem nawet okienka tekstowego powiększyć.
#programowanie #java #hibernate
Przykładowo:
@OneToMany(cascade = CascadeType.MERGE, orphanRemoval = true)
@JoinColumn(name = "userid", nullable = false)
private Set<UserRole> userRoles;