1
resposta

[Dúvida] Java spring boot jpa - como persistir dados de uma lista?

Estou estudando relacionamentos e me veio a seguinte dúvida:

Tenho uma situação onde várias pessoas possuem várias características, ou seja um relacionamento many to many. A parte de como configura o relacionamento eu compreendi (por favor me corrijam se estiver errado):

Classe pessoa

 @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name="pessoas_caracteristicas",
            joinColumns={@JoinColumn(name="id_pessoa", referencedColumnName="id_pessoa")},
            inverseJoinColumns={@JoinColumn(name="id_caracteristicas", referencedColumnName="id_caracteristica")})
    private List<Caracteristica> caracteristicas;

Classe caracterítica

    @ManyToMany(mappedBy = "caracteristicas", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Pessoa> pessoas;

Baseado nisso fiz o seguinte DTO que se chama DadosCadastroPessoa:

public record DadosCadastroPessoa(
         Long id,

        @NotBlank
        String nome,

        String nome_social,
        @NotNull
        LocalDateTime data_nascimento,

        @CpfValidator.Cpf
        String cpf,

        @NotNull
        List<Caracteristica> caracteristicas) {
}

A minha dúvida é neste caso como faria para salvar os dados da lista e seus respectivos id's irem para a tabela de quebra

1 resposta

Olá, Natali

Você está no caminho certo com o seu relacionamento many-to-many no Spring Boot. Sobre a sua dúvida, para persistir os dados de uma lista, você pode fazer o seguinte:

  1. Primeiro, você precisa garantir que as entidades de Caracteristica que você deseja associar a Pessoa já existam no banco de dados. Se não existirem, você precisará persisti-las primeiro.

  2. Depois, você pode simplesmente adicionar essas entidades de Caracteristica à lista de caracteristicas na sua entidade Pessoa e, em seguida, salvar a entidade Pessoa. Isso irá automaticamente persistir as relações na tabela de junção.

Aqui está um exemplo de como você pode fazer isso:

// Suponha que você já tenha uma lista de entidades Caracteristica
List<Caracteristica> caracteristicas = ...;

// Crie uma nova entidade Pessoa
Pessoa pessoa = new Pessoa();

// Adicione as características à pessoa
pessoa.setCaracteristicas(caracteristicas);

// Salve a entidade Pessoa
pessoaRepository.save(pessoa);

Neste exemplo, pessoaRepository é uma instância de JpaRepository ou CrudRepository para a entidade Pessoa.

Lembre-se de que, ao trabalhar com JPA, é importante entender o conceito de estados de entidade (transiente, persistente e destacado). No exemplo acima, as entidades de Caracteristica precisam estar no estado persistente (ou seja, precisam ser gerenciadas pelo contexto de persistência do JPA) para que o JPA possa rastrear as alterações nessas entidades e persistir as relações na tabela de junção.

Espero ter ajudado e bons estudos!