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

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

}

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);
2 curtidas

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?

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.

1 curtida

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:

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)

1 curtida