Nesse exemplo, temos uma entidade "Livro" e uma entidade "Autor" que possuem um relacionamento muitos-para-muitos entre si. A anotação @ManyToMany é usada em ambos os campos "autores" (na classe Livro) e "livros" (na classe Autor) para indicar esse relacionamento. A anotação @JoinTable é usada para criar uma tabela de junção chamada "livro_autor" que mapeia o relacionamento, especificando as colunas "livro_id" e "autor_id" que serão usadas para fazer a junção entre as tabelas.
@Entity
public class Livro {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String titulo;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "livro_autor",
joinColumns = @JoinColumn(name = "livro_id"), // Entidade atual
inverseJoinColumns = @JoinColumn(name = "autor_id") // Entidade a qual quero relacionar atual
)
@JsonIgnoreProperties("livros")
private List<Autor> autores;
// getters e setters
}
@Entity
public class Autor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String nome;
@ManyToMany(mappedBy = "autores") // Nome da propriedade de ligação na classe Livro (autores)
private List<Livro> livros;
// getters e setters
}