Persistencia JPA Hibernate com composição

6 respostas
java
R

Tenho a seguinte Entidade:

@Entity
@Table(name = "saccliente")
public class SacClienteMOD {

    @Id
    @GeneratedValue
    private Integer id;
    private ClienteMOD cliente;
    private Date dataAtend;
    private Integer notaFiscal;
    private Date dataNotaFiscal;
    private String descricao;
    private String tipoSac;
    private String tipoPeca;
    private String acaoTomada;
    private byte[] arquivo;
    private Date dataEncerra;
    private String obsEncerra;

    public SacClienteMOD() {
        cliente = new ClienteMOD();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public ClienteMOD getCliente() {
        return cliente;
    }

    public void setCliente(ClienteMOD cliente) {
        this.cliente = cliente;
    }

    public Date getDataAtend() {
        return dataAtend;
    }

    public void setDataAtend(Date dataAtend) {
        this.dataAtend = dataAtend;
    }

    public Integer getNotaFiscal() {
        return notaFiscal;
    }

    public void setNotaFiscal(Integer notaFiscal) {
        this.notaFiscal = notaFiscal;
    }

    public Date getDataNotaFiscal() {
        return dataNotaFiscal;
    }

    public void setDataNotaFiscal(Date dataNotaFiscal) {
        this.dataNotaFiscal = dataNotaFiscal;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getTipoSac() {
        return tipoSac;
    }

    public void setTipoSac(String tipoSac) {
        this.tipoSac = tipoSac;
    }

    public String getTipoPeca() {
        return tipoPeca;
    }

    public void setTipoPeca(String tipoPeca) {
        this.tipoPeca = tipoPeca;
    }

    public String getAcaoTomada() {
        return acaoTomada;
    }

    public void setAcaoTomada(String acaoTomada) {
        this.acaoTomada = acaoTomada;
    }

    public byte[] getArquivo() {
        return arquivo;
    }

    public void setArquivo(byte[] arquivo) {
        this.arquivo = arquivo;
    }

    public Date getDataEncerra() {
        return dataEncerra;
    }

    public void setDataEncerra(Date dataEncerra) {
        this.dataEncerra = dataEncerra;
    }

    public String getObsEncerra() {
        return obsEncerra;
    }

    public void setObsEncerra(String obsEncerra) {
        this.obsEncerra = obsEncerra;
    }

essa tabela no BD é assim:

id INTEGER PRIMARY KEY
id_cliente INTEGER
dataAtend DATE
notaFiscal INTEGER
dataNotaFiscal DATE
descricao VARCHAR
tipoSac VARCHAR
tipoPeca VARCHAR
acaoTomada VARCHAR
arquivo BLOB
dataEncerra DATE
obsEncerra VARCHAR

Como faço para persistir esta entidade usando JPA sendo que tenho composição de cliente na classe?

6 Respostas

L

`como SacClienteMOD é uma entidade vc deve implementar serialzable pois a mesma será persistida. Quando se utiliza JPA vc mapeia os relacionamentos através de anotações p.ex se SacClienteMOD possui apenas um ClienteMOD a cada transação basta vc fazer isso
@OneToOne
private ClienteMOD cliente;
// gerar os getters e setters

com essa anotação a JPA reconhece que ao persistir um SacClienteMOD um ClineteMOD será persistido também, claro desde que o mesmo não venha nulo.

`

R

Você disse que ao persistir um SacClienteMOD um ClienteMOD também é persistido.

Mas eu quero apenas persistir um SacClienteMOD com o id_cliente, não quero persistir um ClienteMOD.

Como faço isso?

I

e o ClienteMOD, como é o relacionamento que vc deseja ?

R

Para cada SacCliente tem apenas um Cliente.

E cada Cliente pode ter varios SacCliente.

L

é justamente isso que a API faz, o JPA deixa as tabelas do banco normalizadas, no caso de um relacionamento unidericional @OneToOne será criada uma coluna na tabela SacCleinteMOD com o id de ClienteMOD

L

`caso vc desejar um relacionamento bidirecional

na entidade SacCliente

@OneToMany
private Cliente cliente;

na entidade Cliente

@ManyToOne
private SacCliente sacCliente;

aqui tem uma explicação melhor:

http://uaihebert.com/jpa-onetomany-e-manytoone-unidirecional-e-bidirecional/

`

Criado 28 de fevereiro de 2016
Ultima resposta 29 de fev. de 2016
Respostas 6
Participantes 3