2
respostas

Implementar classes como entidades

Tenho duas classes, uma Cliente e outra Compra, elas são as seguintes

2 respostas

Olá Tibério, tudo bem com você?

Na plataforma, temos um curso de JPA focado nesses relacionamentos, assim como sua continuação. O ideal é que você termine a Formação Java e depois continue para Formação Spring da qual esse curso faz parte.

Mas é possível (porém, não aconselhável) fazer o curso sem atender os pré-requisitos. O problema de explicar por aqui é que existem algumas configurações e diversos outros detalhes que são necessários para que o mapeamento das classes para entidades JPA ocorram sem problemas. Para quebrar o galho, duas classes que serão usadas durante os cursos que eu mencionei, tem o relacionamento que você descreveu.

Então, da mesma forma que (no seu caso) "um Cliente pode ter muitas Compras e uma Compra pode ter apenas um Cliente associado a ela", no exemplo usado no curso "uma Conta pode ter muitas Movimentações e uma Movimentação pode ter apenas uma Conta associado a ela".

Classe da Movimentacao:

@Entity --> Anotação que declara que essa classe é uma entidade JPA
public class Movimentacao {

    @Id --> Indica o atributo que será a chave primária da tabela
    @GeneratedValue(strategy = GenerationType.IDENTITY) --> Indica que é o banco de dados quem vai atribuir o valor da chave primária
    private Long id;

    @Enumerated(EnumType.STRING) --> Indica que esse Enum será salvo em formato de String na tabela
    private TipoMovimentacao tipoMovimentacao;
    private LocalDateTime data;
    private String descricao;
    private BigDecimal valor;

    @ManyToOne --> Indica que o relacionamento entre a Movimentacao e a Conta é de MuitosParaUm ( * , 1 )
    private Conta conta;

    //Getters e Setters dos atributos privados omitidos
}

Classe da Conta:

@Entity
public class Conta {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String titular;
    private Integer agencia;
    private Integer numero;
    private Double saldo;

    @OneToMany(mappedBy = "conta") --> Indica que o relacionamento entre a Conta e a Movimentacao é de UmParaMuitos ( 1 , * ), além de marcar o relacionamento como bidirecional (é um assunto complicado, então recomendo pesquisar)
    private List<Movimentacao> movimentacoes;

    //Getters e Setters dos atributos privados omitidos
}

Fez sentido? Qualquer coisa é só avisar! Forte abraço e bons estudos!!

Acho que entendi... então o relacionamento entre, no meu caso, Cliente e Compra se daria assim?

No Cliente.java :

    @OneToMany(mappedBy = "cliente")
    private List<Compra> compra;

E no Compra.java :

    @ManyToOne
    private Cliente cliente;

Certo?