3
respostas

Mapper de Objeto por ID

Estou com uma dúvida em relação ao spring. Por exemplo, imagine um Post de Salvar Usuários como Seguinte Dto:

{
    "nome: "Joao",
    "email": "teste@teste.com",
    "setor": 1
}

Qual a forma mais clean e elegante de fazer o map do id do setor para o objeto setor? o spring tem alguma forma automatica de conversão?

3 respostas

João, tudo bem?

Cara, eu não sei se eu entendi bem a sua ideia, mas eu criaria o setor como um enum, e poderia colocar um número associado a cada possibilidade. Agora, para salvar no banco, você escolheria o modelo que mais agrade, o nome, ou o número referencia. ex:

public enum Setor {

    CAIXA(1),
    SUPERVISOR(2),
    GESTAO(3),
    DIRETORIA(4);

    private final int valor;

    Setor(int valor) {
        this.valor = valor;
    }

    public int getValor() {
        return valor;
    }
}

no caso eu esqueci de especificar, mas setor também é uma entidade, daí eu teria que ir no banco buscar esse registro para converter o dto para entidade?

então na hora de mapear a entidade, você faria algo parecido com isso aqui:

@Entity
@Table(name = "funcionario")
public class Funcionario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;

    priate String email;

    @Enumerated(EnumType.ORDINAL) 
    private Setor setor;

    // getters e setters
}

Ali no "@Enumerated(EnumType.ORDINAL)" ele vai salvar com o número correspondente no enum, por exemplo "Setor: 1" , caso você queira salvar no banco o nome especifico, você muda para "@Enumerated(EnumType.STRING)", e ele salvara, por exemplo "Setor: CAIXA".

Quando você for buscar algo do banco, no proprio DTO você seleciona como demonstrar, se retorna o nome ou o número.

Acho que era essa a dúvida, certo? Caso eu não tenha entendido, me explique melhor e ajudo!

Abraços