Jpa - Update Indireto

2 respostas
kleins

Pessoal.

Qual é a anotação que devo fazer nas minhas "entity class" para que quando eu faça um update em um objeto ele se reflita nas tabelas relacionadas..

Por exemplo..

Eu tenho duas entidades, uma se chama IUM e a outra PARTNER, elas são relacionadas...

Pelo IUM, eu consigo recuperar o PARTNER, e se eu atualizo a informação (CEP por exemplo) do PARTNER através do IUM, quando eu faço um merge no IUM, não deveria atualizar também o PARTNER ?

Ium ium = DAOFactory.getIumDAO().getIumbyId(BigD.valueOf(3));
        
        System.out.print("Cep : "+ium.getPartnerid().getCep());
        
        ium.getPartnerid().setCep("01010111");

        DAOFactory.getIumDAO().save(ium);

Ou necessariamente eu teria que dar tb um update no Partner separadamente ?

Abaixo eu estou colocando as entity.

[]´s e valeu

Rodrigo

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.org.system4.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author rodrigo.klein
 */
@Entity
@Table(name = "IUM")
@NamedQueries({@NamedQuery(name = "Ium.findByIumid", query = "SELECT i FROM Ium i WHERE i.iumid = :iumid"),  
                @NamedQuery(name = "Ium.findByData", query = "SELECT i FROM Ium i WHERE i.data = :data")})
public class Ium implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    
    @GeneratedValue(generator="IumSeq")
    @SequenceGenerator(name="IumSeq",sequenceName="IUM_SEQ", allocationSize=1)
    
    @Column(name = "IUMID", nullable = false)
    private BigDecimal iumid;
    
    //@Column(name = "EANCODEID")
    
    @JoinColumn(name = "PRID", referencedColumnName = "PRID")
    @ManyToOne
    private Product productid;
    
    @Column(name = "DATA")
    @Temporal(TemporalType.DATE)
    private Date data;
    @OneToMany(mappedBy = "iumid")
    private Collection<Fatheritem> fatheritemCollection;
    @JoinColumn(name = "CODEID", referencedColumnName = "ID")
    @ManyToOne
    private Code codeid;
    @JoinColumn(name = "PARTNERID", referencedColumnName = "PARTNERID")
    @ManyToOne
    private Partner partnerid;
    @OneToMany(mappedBy = "iumid")
    private Collection<Transact> transactCollection;

    public Ium() {
    }

    public Ium(BigDecimal iumid) {
        this.iumid = iumid;
    }

    public BigDecimal getIumid() {
        return iumid;
    }

    public void setIumid(BigDecimal iumid) {
        this.iumid = iumid;
    }



    
    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public Collection<Fatheritem> getFatheritemCollection() {
        return fatheritemCollection;
    }

    public void setFatheritemCollection(Collection<Fatheritem> fatheritemCollection) {
        this.fatheritemCollection = fatheritemCollection;
    }

    public Code getCodeid() {
        return codeid;
    }

    public void setCodeid(Code codeid) {
        this.codeid = codeid;
    }

    public Partner getPartnerid() {
        return partnerid;
    }

    public void setPartnerid(Partner partnerid) {
        this.partnerid = partnerid;
    }

    public Collection<Transact> getTransactCollection() {
        return transactCollection;
    }

    public void setTransactCollection(Collection<Transact> transactCollection) {
        this.transactCollection = transactCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (iumid != null ? iumid.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Ium)) {
            return false;
        }
        Ium other = (Ium) object;
        if ((this.iumid == null && other.iumid != null) || (this.iumid != null && !this.iumid.equals(other.iumid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.org.system4.entity.Ium[iumid=" + iumid + "]";
    }

    public Product getProductid() {
        return productid;
    }

    public void setProductid(Product productid) {
        this.productid = productid;
    }

 

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.org.system4.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author rodrigo.klein
 */
@Entity
@Table(name = "PARTNER")
@NamedQueries({
                @NamedQuery(name = "Partner.findByPartnerid", query = "SELECT p FROM Partner p WHERE p.partnerid = :partnerid"), 
                @NamedQuery(name = "Partner.findByCnpj", query = "SELECT p FROM Partner p WHERE p.cnpj = :cnpj"), 
                @NamedQuery(name = "Partner.findByIe", query = "SELECT p FROM Partner p WHERE p.ie = :ie"), 
                @NamedQuery(name = "Partner.findByEndereco", query = "SELECT p FROM Partner p WHERE p.endereco = :endereco"), 
                @NamedQuery(name = "Partner.findByNumero", query = "SELECT p FROM Partner p WHERE p.numero = :numero"), 
                @NamedQuery(name = "Partner.findByCep", query = "SELECT p FROM Partner p WHERE p.cep = :cep"), 
                @NamedQuery(name = "Partner.findByNome", query = "SELECT p FROM Partner p WHERE p.nome = :nome"), 
                @NamedQuery(name = "Partner.findByRazao", query = "SELECT p FROM Partner p WHERE p.razao = :razao"), 
                @NamedQuery(name = "Partner.findByCidade", query = "SELECT p FROM Partner p WHERE p.cidade = :cidade"), 
                @NamedQuery(name = "Partner.findByUf", query = "SELECT p FROM Partner p WHERE p.uf = :uf")})
                
public class Partner implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    
      @GeneratedValue(generator="PartnerSeq")
      @SequenceGenerator(name="PartnerSeq",sequenceName="PARTNER_SEQ", allocationSize=1)
    
    @Column(name = "PARTNERID", nullable = false)
    private BigDecimal partnerid;
    @Column(name = "CNPJ", nullable = false)
    private String cnpj;
    @Column(name = "IE", nullable = false)
    private String ie;
    @Column(name = "ENDERECO", nullable = false)
    private String endereco;
    @Column(name = "NUMERO", nullable = false)
    private String numero;
    @Column(name = "CEP")
    private String cep;
    @Column(name = "NOME")
    private String nome;
    @Column(name = "RAZAO")
    private String razao;
    @Column(name = "CIDADE")
    private String cidade;
    @Column(name = "UF")
    private String uf;
    @OneToMany(mappedBy = "partnerid")
    private Collection<Nf> nfCollection;
    @OneToMany(mappedBy = "partnerid")
    private Collection<Partnertype> partnertypeCollection;
    @OneToMany(mappedBy = "partnerid")
    private Collection<Ium> iumCollection;
    @OneToMany(mappedBy = "partnerid")
    private Collection<Useraccess> useraccessCollection;
    @OneToMany(mappedBy = "partneridOrigem")
    private Collection<Transact> transactCollection;
    @OneToMany(mappedBy = "partneridDest")
    private Collection<Transact> transactCollection1;
    
    @OneToMany(mappedBy = "partnerid")
    private Collection<Product> productCollection;

    public Partner() {
    }

    public Partner(BigDecimal partnerid) {
        this.partnerid = partnerid;
    }

    public Partner(BigDecimal partnerid, String cnpj, String ie, String endereco, String numero) {
        this.partnerid = partnerid;
        this.cnpj = cnpj;
        this.ie = ie;
        this.endereco = endereco;
        this.numero = numero;
    }

    public BigDecimal getPartnerid() {
        return partnerid;
    }

    public void setPartnerid(BigDecimal partnerid) {
        this.partnerid = partnerid;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getIe() {
        return ie;
    }

    public void setIe(String ie) {
        this.ie = ie;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRazao() {
        return razao;
    }

    public void setRazao(String razao) {
        this.razao = razao;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getUf() {
        return uf;
    }

    public void setUf(String uf) {
        this.uf = uf;
    }

    public Collection<Nf> getNfCollection() {
        return nfCollection;
    }

    public void setNfCollection(Collection<Nf> nfCollection) {
        this.nfCollection = nfCollection;
    }

    public Collection<Partnertype> getPartnertypeCollection() {
        return partnertypeCollection;
    }

    public void setPartnertypeCollection(Collection<Partnertype> partnertypeCollection) {
        this.partnertypeCollection = partnertypeCollection;
    }

    public Collection<Ium> getIumCollection() {
        return iumCollection;
    }

    public void setIumCollection(Collection<Ium> iumCollection) {
        this.iumCollection = iumCollection;
    }

    public Collection<Useraccess> getUseraccessCollection() {
        return useraccessCollection;
    }

    public void setUseraccessCollection(Collection<Useraccess> useraccessCollection) {
        this.useraccessCollection = useraccessCollection;
    }

    public Collection<Transact> getTransactCollection() {
        return transactCollection;
    }

    public void setTransactCollection(Collection<Transact> transactCollection) {
        this.transactCollection = transactCollection;
    }

    public Collection<Transact> getTransactCollection1() {
        return transactCollection1;
    }

    public void setTransactCollection1(Collection<Transact> transactCollection1) {
        this.transactCollection1 = transactCollection1;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (partnerid != null ? partnerid.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Partner)) {
            return false;
        }
        Partner other = (Partner) object;
        if ((this.partnerid == null && other.partnerid != null) || (this.partnerid != null && !this.partnerid.equals(other.partnerid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.org.system4.entity.Partner[partnerid=" + partnerid + "]";
    }

    public Collection<Product> getProductCollection() {
        return productCollection;
    }

    public void setProductCollection(Collection<Product> productCollection) {
        this.productCollection = productCollection;
    }

}

2 Respostas

R

Não, não deveria.

Mas experimenta, ao mapear o relacionamento, o seguinte: @to(cascade=CascadeType.MERGE)

kleins

Valeu.

Deu certo.

Abraço.

Rodrigo

Criado 7 de julho de 2008
Ultima resposta 7 de jul. de 2008
Respostas 2
Participantes 2