Cześć, mam pewien problem z stworzeniem relacji wiele do wielu. Stworzyłem dwie tabele główne między którymi ma występować ta relacja oraz tabelę spinającą. Stworzyłem również oba modele tych klas które mapuję. Problem polega na tym że po dodaniu obiektów do bazy danych w tabeli łączącej nie ma żadnych danych.
Modele reprezentujące obie tabele.
Klasa User
@Entity
@Table(name="users", schema = "carassistant")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_user")
private int id;
@Column(name="last_name")
private String lastName;
@Column(name="first_name")
private String firstName;
@Column(name="email")
private String email;
@Column(name="enabled")
private byte enabled;
@ManyToMany(fetch=FetchType.LAZY,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinTable
(
name="u_users_authorites",
joinColumns=@JoinColumn(name="id_user"),
inverseJoinColumns=@JoinColumn(name="id_authorites_table")
)
private List<Authorities> authorites;
public User( String lastName, String firstName, String email, int i) {
//this.id = id;
this.lastName = lastName;
this.firstName = firstName;
this.email = email;
this.enabled = (byte) i;
}
public User()
{}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public byte getEnabled() {
return enabled;
}
public void setEnabled(byte enabled) {
this.enabled = enabled;
}
}
Klasa Authorities
@Entity
@Table(name="authorities", schema = "carassistant")
public class Authorities {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_authorities")
private int id;
@Column(name="password")
private String password;
@Column(name="username")
private String username;
@ManyToMany(fetch=FetchType.LAZY,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinTable(
name="u_users_authorites",
joinColumns=@JoinColumn(name="id_authorities"),
inverseJoinColumns=@JoinColumn(name="id_user_table"))
private List<User> user;
public Authorities(String password, String username)
{
this.password = password;
this.username = username;
}
public Authorities()
{}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Dwa interfejsy do pracy z klasą:
public interface AuthoritiesRepository extends JpaRepository<Authorities, Integer>
{
public List<Authorities> findAll();
}
AuthoritiesService:
public interface AuthoritiesService
{
List<Authorities> findAll();
Authorities findById(int id);
void save(Authorities authorities);
void deleteByIdCarType(int Authorities);
}
Oraz jego implementacja:
@Service
public class AuthoritiesServiceImpl implements AuthoritiesService{
private AuthoritiesRepository authoritiesRepository;
@Autowired
public AuthoritiesServiceImpl(AuthoritiesRepository authoritiesRepository)
{
this.authoritiesRepository = authoritiesRepository;
}
@Override
public List<Authorities> findAll()
{
return authoritiesRepository.findAll();
}
@Override
public Authorities findById(int idCarType)
{
Optional<Authorities> result = authoritiesRepository.findById(idCarType);
Authorities authorities = null;
if (result.isPresent()) {
authorities = result.get();
}
else {
throw new RuntimeException("Did not find car type id - " + idCarType);
}
return authorities;
}
@Override
public void save(Authorities authorities)
{
authoritiesRepository.save(authorities);
}
@Override
public void deleteByIdCarType(int idCarType)
{
authoritiesRepository.deleteById(idCarType);
}
}
Może ktoś podpowie gdzie popełniam błąd. Dla klasy User interfejsy i ich implementacja jest podobna więc nie zamieszczam jej. Z góry dzięki za pomoc.