@ManyToMany
Exemple entre deux Entities Movie et Genre

import javax.persistence.*;
import java.util.*;
@Entity
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
// ...
/**
* Par défaut FetchType.LAZY pour @OneToMany et @ManyToMany
* Et FetchType.EAGER pour @OneToOne et @ManyToOne
*/
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "movie_genre",
joinColumns = @JoinColumn(name = "movie_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "genre_id", referencedColumnName = "id")
)
private Set<Genre> genres = new HashSet<>();
// GETTERS & SETTERS & AUTRES METHODES DE CLASSE
public Set<Genre> getGenres() {
return Collections.unmodifiableSet(genres);
}
public Movie addGenre(Genre genre) {
if(genre != null) {
genres.add(genre);
genre.getMovies().add(this);
}
return this;
}
public Movie removeGenre(Genre genre) {
if(genre != null) {
genres.remove(genre);
genre.getMovies().remove(this);
}
return this;
}
// equals() et hascode() pour comparer les objets
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Movie)) return false;
Movie movie = (Movie) o;
return getId().equals(movie.getId())
&& getName().equals(movie.getName())
&& getDescription().equals(movie.getDescription())
&& getCertification() == movie.getCertification()
&& getReviews().equals(movie.getReviews());
}
@Override
public int hashCode() {
return Objects.hash(getId(), getName(), getDescription(), getCertification(), getReviews());
}
}Langage du code : PHP (php)
import javax.persistence.*;
import java.util.*;
@Entity
public class Genre {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Column(unique = true)
private String name;
@ManyToMany(mappedBy = "genres")
private Set<Movie> movies = new HashSet<>();
// ... Getters et setters
// equals() & hasCode(): la comparaison sur l'attribut "name" est suffisant car on considère que ce dernier est unique
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Genre)) return false;
Genre other = (Genre) o;
return getName().equals(other.getName()); // Ou Objects.equals(name, other.getName())
}
@Override
public int hashCode() {
return Objects.hash(getName());
}
public Set<Movie> getMovies() {
//return Collections.unmodifiableSet(movies);
return movies;
}
@Override
public String toString() {
return "Genre{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Langage du code : JavaScript (javascript)