Spring Boot @ManyToMany, como inserir dados em uma tabela associativa

5 respostas
springmysqljpa
C

Olá, gostaria de saber se alguém conseguiria me auxiliar em uma duvida na qual estou enfrentando no momento. Comecei a estudar recentemente Spring Boot com JPA, Java, MySQL e Postman. Estou criando um sistema para atender uma loja de games, meu problema esta em relação as classes Plataforma e Jogo, onde eu gostaria de realizar um relacionamento (N : N) entre essas entidades.
Pesquisando na documentação ( Many-To-Many Relationship in JPA | Baeldung) eu consegui criar a tabela associativa no banco de dados.

E é nesse ponto que surge minha duvida, como eu faço para inserir os id das tabelas (plataforma e jogo) nessa minha tabela associativa (plataforma_jogo)?

Já tenho criado meus controller e repository de ambas as classes criadas para poder manipular os dados via CRUD pelo Postman.

Vou colocar aqui o que fiz ate o momento para tentar ilustrar melhor minha duvida, se puderem me auxiliar eu agradeço muito.

Tabela: Plataforma

[…] imports

@Entity

@Table(name = plataforma)

public class Plataforma {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@NotNull
@Size(max = 50)
private String nome;

@NotNull
@Size(max = 1000)
private String descricao;

@ManyToOne
@JsonIgnoreProperties("plataforma")
private Categoria categoria;

@ManyToMany
@JoinTable(name = "plataforma_jogo", 
  joinColumns = {@JoinColumn(name = "plataforma_id")}, 
  inverseJoinColumns = {@JoinColumn(name = "jogo_id")}
)
    private List<Jogo> jogo;

[…] gets and sets

}

Tabela: Jogo

[…] imports

@Entity

@Table(name = jogo)

public class Jogo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@NotNull
@Size(max = 50)
private String nome;

@NotNull
@Size(max = 1000)
private String descricao;

@NotNull
private double preco;

@ManyToOne
@JsonIgnoreProperties("jogo")
private Desenvolvedora desenvolvedora;
	
   @ManyToMany(mappedBy = "jogo")
   private List<Plataforma> plataforma;

[…] gets and sets

}

5 Respostas

J

Você fez tudo certo até agora ( eu só colocaria os nomes de atributos de lista no plural, mas isso é detalhe ), pra adicionar registros no relacionamento, basta adicionar um jogo na lista de plataformas, ou uma plataforma na lista de jogos e salvar a entidade, p. ex:

plataforma.getJogo().add(jogoQueVcTemNoBanco);
entityManager.merge(plataforma);
C

Olá, agradeço o retorno.

Vou ajustas os atributos, obrigado por pontuar esse ponto. E em relação ao registro eu faria isso dentro de uma nova camada da aplicação, no caso o service? Ou dentro das minhas classes Plataforma e Jogo?

J

Depende de como vc esta organizando sua aplicação, mas geralmente é numa camada de serviço sim, a mesma que vc usa para inserir as entidades.

C

OK então, muito obrigado pelo retorno e pela ajuda. Vou tentar aplicar aqui, e depois disponibilizo o link de meu GitHub com o projeto completo para poder auxiliar outras pessoas que tiverem a mesma dificuldade que a minha!!

Agradeço muito a ajuda!! :grinning:

C

Olá, muito obrigado pela ajuda. :sunglasses::v:

Esta aqui o repositório, espero que ajude quem estiver com a mesma duvida que a minha:
Desenvolvi esse sistema com base em uma aplicação que meu professor forneceu para nos basearmos.

Ferramentas: Java, Spring Boot JPA, MySQL e Postman (para testes de CRUD)

Clamant96/sistema-ecomerce-spring (github.com)

Criado 25 de março de 2021
Ultima resposta 26 de mar. de 2021
Respostas 5
Participantes 2