Boa tarde,
Estou na seguinte situação, estou utilizando JPA para fazer o mapeamento das minhas classes, porém não sei como fazer nos três casos que eu tenho:
As classes estão sendo mapeadas por :
@JoinColumn(name = "ODEX_PK", referencedColumnName = "CODIGO") @ManyToOne(cascade = CascadeType.ALL)
1- Necessário fazer a inserção no banco de dados das duas Classes, Mov_Capex(Filho) e Odex(Pai). (Este caso está funcionando com o CascadeType.ALL (PERSIST)).
2- Necessário fazer a inserção no banco de dados da classe Mov_Capex e atualizar a classe Odex. (Não funciona, o MERGE não está funcionando nesse caso, sei que ele só funciona quando atualiza o pai e o filho ao mesmo tempo).
3- Necessário fazer a inserção no banco de dados da classe Mov_Capex e não fazer nada na classe Odex. (O REFRESH deveria permitir isso, mas mesmo assim está acusando violação da regra, creio que esteja tentando dar PERSIST). Existe alguma forma ou é preciso dizer qual ele deve utilizar naquele momento?
Obrigado.
Segue as classes abaixo:
Mov_Capex
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.celg.entidade;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.CascadeType;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author Rodrigo
*/
@Entity
@Table(name = "MOV_CAPEX")
@XmlRootElement
public class MovCapex extends SuperLogic implements Serializable {
private static final long serialVersionUID = 1L;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "DATA_CD")
@Temporal(TemporalType.TIMESTAMP)
private Date dataCd;
@Column(name = "DATA")
@Temporal(TemporalType.TIMESTAMP)
private Date data;
@Column(name = "DATA_REF")
private String dataRef;
@javax.persistence.Transient
private String odex;
@Column(name = "DESCRICAO_ODEX")
private String descricaoOdex;
@Column(name = "OBRAS_TERCEIROS")
private String obrasTerceiros;
@Column(name = "ASSUNTO")
private String assunto;
@Column(name = "VALOR")
private BigDecimal valor;
@Column(name = "NATUREZA")
private String natureza;
@Column(name = "PLANO_QUALIDADE")
private String planoQualidade;
@Column(name = "MOTIVO")
private String motivo;
@JoinColumn(name = "ODEX_PK", referencedColumnName = "CODIGO")
@ManyToOne(cascade = CascadeType.ALL)
private Odex odexPk;
@JoinColumn(name = "CR", referencedColumnName = "CODIGO")
@ManyToOne
private Cr cr;
@javax.persistence.Transient
private ClassTaxonomia idClassTaxonomia;
public MovCapex() {
}
public MovCapex(Long codigo) {
this.setCodigo(codigo);
}
public Date getDataCd() {
return dataCd;
}
public void setDataCd(Date dataCd) {
this.dataCd = dataCd;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
public String getDataRef() {
return dataRef;
}
public String getOdex() {
return odex;
}
public void setOdex(String odex) {
this.odex = odex;
}
public void setDataRef(String dataRef) {
this.dataRef = dataRef;
}
public Odex getOdexPk() {
return odexPk;
}
public void setOdexPk(Odex odexPk) {
this.odexPk = odexPk;
}
public String getDescricaoOdex() {
return descricaoOdex;
}
public void setDescricaoOdex(String descricaoOdex) {
this.descricaoOdex = descricaoOdex;
}
public String getObrasTerceiros() {
return obrasTerceiros;
}
public void setObrasTerceiros(String obrasTerceiros) {
this.obrasTerceiros = obrasTerceiros;
}
public String getAssunto() {
return assunto;
}
public void setAssunto(String assunto) {
this.assunto = assunto;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
public String getNatureza() {
return natureza;
}
public void setNatureza(String natureza) {
this.natureza = natureza;
}
public String getPlanoQualidade() {
return planoQualidade;
}
public void setPlanoQualidade(String planoQualidade) {
this.planoQualidade = planoQualidade;
}
public String getMotivo() {
return motivo;
}
public void setMotivo(String motivo) {
this.motivo = motivo;
}
public Cr getCr() {
return cr;
}
public void setCr(Cr cr) {
this.cr = cr;
}
public ClassTaxonomia getIdClassTaxonomia() {
return idClassTaxonomia;
}
public void setIdClassTaxonomia(ClassTaxonomia idClassTaxonomia) {
this.idClassTaxonomia = idClassTaxonomia;
}
@Override
public int hashCode() {
int hash = 0;
hash += (getCodigo() != null ? getCodigo().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 MovCapex)) {
return false;
}
MovCapex other = (MovCapex) object;
if ((this.getCodigo() == null && other.getCodigo() != null) || (this.getCodigo() != null && !this.getCodigo().equals(other.getCodigo()))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.celg.entidade.MovCapex[ codigo=" + getCodigo() + " ]";
}
}
Odex
package br.com.celg.entidade;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author Rodrigo
*/
@Entity
@Table(name = "ODEX")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Odex.findAll", query = "SELECT o FROM Odex o ORDER BY o.odex ASC")})
public class Odex extends SuperLogic implements Serializable {
private static final long serialVersionUID = 1L;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "ODEX")
private String odex;
@JoinColumn(name = "CLASS_TAXONOMIA", referencedColumnName = "CODIGO")
@ManyToOne
private ClassTaxonomia idClassTaxonomia;
public Odex() {
}
public Odex(Long codigo) {
this.setCodigo(codigo);
}
public String getOdex() {
return odex;
}
public void setOdex(String odex) {
this.odex = odex;
}
public ClassTaxonomia getIdClassTaxonomia() {
return idClassTaxonomia;
}
public void setIdClassTaxonomia(ClassTaxonomia idClassTaxonomia) {
this.idClassTaxonomia = idClassTaxonomia;
}
@Override
public int hashCode() {
int hash = 0;
hash += (getCodigo() != null ? getCodigo().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 Odex)) {
return false;
}
Odex other = (Odex) object;
if ((this.getCodigo() == null && other.getCodigo() != null) || (this.getCodigo() != null && !this.getCodigo().equals(other.getCodigo()))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.celg.entidade.Odex[ codigo=" + getCodigo() + " ]";
}
}