boa tarde, estou desenvolvendo um projeto e após fazer uma importação de alguns dados, estou testando o desempenho e notei uma coisa que não consegui compreender, ao atualizar minha entidade matricula a mesma que contém um aluno executa um select para cada aluno do meu banco deixando o processo muito lento, ou seja, em 3000 alunos, ele faz 3000 selects a cada atualização, já na inserção esta bem rápido vou postar minhas entidades.
Estou utilizando ejb 3.1 as transações são gerenciadas pelo container e o meu método disparado é o merge
alguem já passou por este problema?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.usinaweb.secom.entity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author Rogério Martins
*/
@Entity
@Table(name = "esc_matricula", catalog = "secom", schema = "", uniqueConstraints = {
@UniqueConstraint(columnNames = {"sertrm_codigo", "aln_codigo"})})
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "EscMatricula.findAll", query = "SELECT e FROM EscMatricula e")})
public class EscMatricula implements Serializable {
@Size(max = 2)
@Column(name = "matcl_status", length = 2)
private String matclStatus;
@Size(max = 2)
@Column(name = "matcl_recuperacao", length = 2)
private String matclRecuperacao;
@Column(name = "matcl_codigo_importacao")
private Integer matclCodigoImportacao;
@Size(max = 15)
@Column(name = "matcl_codigo_estado", length = 15)
private String matclCodigoEstado;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
// @NotNull
@Column(name = "matcl_codigo", nullable = false)
private Integer matclCodigo;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2)
@Column(name = "matcl_bolsista", nullable = false, length = 2)
private String matclBolsista;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "escMatricula")
private List<EscContrinuicoes> escContrinuicoesList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "escMatricula")
private List<EscFrequencia> escFrequenciaList;
@JoinColumn(name = "sertrm_codigo", referencedColumnName = "sertrm_codigo", nullable = false)
@ManyToOne(optional = false)
private EscSerieTurma escSerieTurma;
@JoinColumn(name = "aln_codigo", referencedColumnName = "aln_codigo", nullable = false)
@ManyToOne(optional = false)
private CadAluno cadAluno;
public EscMatricula() {
}
public EscMatricula(Integer matclCodigo) {
this.matclCodigo = matclCodigo;
}
public EscMatricula(Integer matclCodigo, String matclBolsista) {
this.matclCodigo = matclCodigo;
this.matclBolsista = matclBolsista;
}
public Integer getMatclCodigo() {
return matclCodigo;
}
public void setMatclCodigo(Integer matclCodigo) {
this.matclCodigo = matclCodigo;
}
public String getMatclBolsista() {
return matclBolsista;
}
public void setMatclBolsista(String matclBolsista) {
this.matclBolsista = matclBolsista;
}
@XmlTransient
public List<EscContrinuicoes> getEscContrinuicoesList() {
return escContrinuicoesList;
}
public void setEscContrinuicoesList(List<EscContrinuicoes> escContrinuicoesList) {
this.escContrinuicoesList = escContrinuicoesList;
}
@XmlTransient
public List<EscFrequencia> getEscFrequenciaList() {
return escFrequenciaList;
}
public void setEscFrequenciaList(List<EscFrequencia> escFrequenciaList) {
this.escFrequenciaList = escFrequenciaList;
}
public EscSerieTurma getEscSerieTurma() {
return escSerieTurma;
}
public void setEscSerieTurma(EscSerieTurma escSerieTurma) {
this.escSerieTurma = escSerieTurma;
}
public CadAluno getCadAluno() {
return cadAluno;
}
public void setCadAluno(CadAluno cadAluno) {
this.cadAluno = cadAluno;
}
@Override
public int hashCode() {
int hash = 0;
hash += (matclCodigo != null ? matclCodigo.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 EscMatricula)) {
return false;
}
EscMatricula other = (EscMatricula) object;
if ((this.matclCodigo == null && other.matclCodigo != null) || (this.matclCodigo != null && !this.matclCodigo.equals(other.matclCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.usinaweb.secom.entity.EscMatricula[ matclCodigo=" + matclCodigo + " ]";
}
public String getMatclCodigoEstado() {
return matclCodigoEstado;
}
public void setMatclCodigoEstado(String matclCodigoEstado) {
this.matclCodigoEstado = matclCodigoEstado;
}
public Integer getMatclCodigoImportacao() {
return matclCodigoImportacao;
}
public void setMatclCodigoImportacao(Integer matclCodigoImportacao) {
this.matclCodigoImportacao = matclCodigoImportacao;
}
public String getMatclStatus() {
return matclStatus;
}
public void setMatclStatus(String matclStatus) {
this.matclStatus = matclStatus;
}
public String getMatclRecuperacao() {
return matclRecuperacao;
}
public void setMatclRecuperacao(String matclRecuperacao) {
this.matclRecuperacao = matclRecuperacao;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.usinaweb.secom.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author rms
*/
@Entity
@Table(name = "cad_aluno", catalog = "secom", schema = "")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "CadAluno.findAll", query = "SELECT c FROM CadAluno c")})
public class CadAluno implements Serializable {
@Column(name = "aln_data_transferencia")
@Temporal(TemporalType.DATE)
private Date alnDataTransferencia;
@Column(name = "aln_codigo_importacao")
private Integer alnCodigoImportacao;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2)
@Column(name = "aln_importado", nullable = false, length = 2)
private String alnImportado;
@OneToMany(mappedBy = "cadAluno")
private List<MovProdutosServicos> movProdutosServicosList;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2)
@Column(name = "aln_status", nullable = false, length = 2)
private String alnStatus;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
// @NotNull
@Column(name = "aln_codigo", nullable = false)
private Integer alnCodigo;
@Size(max = 250)
@Column(name = "aln_pai", length = 250)
private String alnPai;
@Size(max = 250)
@Column(name = "aln_mae", length = 250)
private String alnMae;
@Size(max = 2)
@Column(name = "aln_cor", length = 2)
private String alnCor;
@JoinColumn(name = "undd_codigo", referencedColumnName = "undd_codigo", nullable = false)
@ManyToOne(optional = false)
private CadUnidade cadUnidade;
@JoinColumn(name = "pss_codigo", referencedColumnName = "pss_codigo", nullable = false)
@ManyToOne(optional = false)
private CadPessoa cadPessoa;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadAluno")
private List<EscHistorico> escHistoricoList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadAluno")
private List<EscMatricula> escMatriculaList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadAluno")
private List<EscPreMatricula> escPreMatriculaList;
public CadAluno() {
}
public CadAluno(Integer alnCodigo) {
this.alnCodigo = alnCodigo;
}
public Integer getAlnCodigo() {
return alnCodigo;
}
public void setAlnCodigo(Integer alnCodigo) {
this.alnCodigo = alnCodigo;
}
public String getAlnPai() {
return alnPai;
}
public void setAlnPai(String alnPai) {
this.alnPai = alnPai;
}
public String getAlnMae() {
return alnMae;
}
public void setAlnMae(String alnMae) {
this.alnMae = alnMae;
}
public String getAlnCor() {
return alnCor;
}
public void setAlnCor(String alnCor) {
this.alnCor = alnCor;
}
public CadUnidade getCadUnidade() {
return cadUnidade;
}
public void setCadUnidade(CadUnidade cadUnidade) {
this.cadUnidade = cadUnidade;
}
public CadPessoa getCadPessoa() {
return cadPessoa;
}
public void setCadPessoa(CadPessoa cadPessoa) {
this.cadPessoa = cadPessoa;
}
@XmlTransient
public List<EscHistorico> getEscHistoricoList() {
return escHistoricoList;
}
public void setEscHistoricoList(List<EscHistorico> escHistoricoList) {
this.escHistoricoList = escHistoricoList;
}
@XmlTransient
public List<EscMatricula> getEscMatriculaList() {
return escMatriculaList;
}
public void setEscMatriculaList(List<EscMatricula> escMatriculaList) {
this.escMatriculaList = escMatriculaList;
}
@XmlTransient
public List<EscPreMatricula> getEscPreMatriculaList() {
return escPreMatriculaList;
}
public void setEscPreMatriculaList(List<EscPreMatricula> escPreMatriculaList) {
this.escPreMatriculaList = escPreMatriculaList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (alnCodigo != null ? alnCodigo.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 CadAluno)) {
return false;
}
CadAluno other = (CadAluno) object;
if ((this.alnCodigo == null && other.alnCodigo != null) || (this.alnCodigo != null && !this.alnCodigo.equals(other.alnCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.usinaweb.secom.entity.CadAluno[ alnCodigo=" + alnCodigo + " ]";
}
public String getAlnStatus() {
return alnStatus;
}
public void setAlnStatus(String alnStatus) {
this.alnStatus = alnStatus;
}
@XmlTransient
public List<MovProdutosServicos> getMovProdutosServicosList() {
return movProdutosServicosList;
}
public void setMovProdutosServicosList(List<MovProdutosServicos> movProdutosServicosList) {
this.movProdutosServicosList = movProdutosServicosList;
}
public String getAlnImportado() {
return alnImportado;
}
public void setAlnImportado(String alnImportado) {
this.alnImportado = alnImportado;
}
public Integer getAlnCodigoImportacao() {
return alnCodigoImportacao;
}
public void setAlnCodigoImportacao(Integer alnCodigoImportacao) {
this.alnCodigoImportacao = alnCodigoImportacao;
}
public Date getAlnDataTransferencia() {
return alnDataTransferencia;
}
public void setAlnDataTransferencia(Date alnDataTransferencia) {
this.alnDataTransferencia = alnDataTransferencia;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.usinaweb.secom.entity;
import br.com.usinaweb.secom.anotacoes.CPF;
import br.com.usinaweb.secom.anotacoes.Telefone;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.validator.constraints.Email;
/**
*
* @author rms
*/
@Entity
@Table(name = "cad_pessoa", catalog = "secom", schema = "")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "CadPessoa.findAll", query = "SELECT c FROM CadPessoa c")})
public class CadPessoa implements Serializable {
@Column(name = "pss_nasc")
@Temporal(TemporalType.DATE)
private Date pssNasc;
@Basic(optional = false)
@NotNull
@Column(name = "pss_cadastro", nullable = false)
@Temporal(TemporalType.DATE)
private Date pssCadastro;
@Lob
@Size(max = 65535)
@Column(name = "pss_observacao", length = 65535)
private String pssObservacao;
@Column(name = "pss_codigo_importacao")
private Integer pssCodigoImportacao;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
// @NotNull
@Column(name = "pss_codigo", nullable = false)
private Integer pssCodigo;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "pss_nome", nullable = false, length = 255)
private String pssNome;
@Size(max = 2)
@Column(name = "pss_sexo", length = 2)
private String pssSexo;
@Size(max = 2)
@Column(name = "pss_estado_civil", length = 2)
private String pssEstadoCivil;
@Size(max = 100)
@Column(name = "pss_natural", length = 100)
private String pssNatural;
@Size(max = 13)
@Column(name = "pss_tel_res", length = 13)
@Telefone
private String pssTelRes;
@Size(max = 13)
@Column(name = "pss_tel_cel", length = 13)
@Telefone
private String pssTelCel;
@Size(max = 13)
@Column(name = "pss_tel_com", length = 13)
@Telefone
private String pssTelCom;
@Size(max = 28)
@Column(name = "pss_rg", length = 28)
private String pssRg;
@Size(max = 14)
@Column(name = "pss_cpf", length = 14)
@CPF
private String pssCpf;
@Size(max = 150)
@Column(name = "pss_email", length = 150)
@Email
private String pssEmail;
@Size(max = 2)
@Column(name = "pss_origem", length = 2)
private String pssOrigem;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadPessoa")
private List<CadAluno> cadAlunoList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadPessoa")
private List<CadFornecedor> cadFornecedorList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadPessoa")
private List<CadFichaMedica> cadFichaMedicaList;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "cadPessoa")
private List<CadFuncionario> cadFuncionarioList;
@JoinColumn(name = "endrc_codigo", referencedColumnName = "endrc_codigo")
@ManyToOne
private CadEndereco cadEndereco;
public CadPessoa() {
}
public CadPessoa(Integer pssCodigo) {
this.pssCodigo = pssCodigo;
}
public CadPessoa(Integer pssCodigo, String pssNome, Date pssCadastro) {
this.pssCodigo = pssCodigo;
this.pssNome = pssNome;
this.pssCadastro = pssCadastro;
}
public Integer getPssCodigo() {
return pssCodigo;
}
public void setPssCodigo(Integer pssCodigo) {
this.pssCodigo = pssCodigo;
}
public String getPssNome() {
return pssNome;
}
public void setPssNome(String pssNome) {
this.pssNome = pssNome;
}
public Date getPssNasc() {
return pssNasc;
}
public void setPssNasc(Date pssNasc) {
this.pssNasc = pssNasc;
}
public String getPssSexo() {
return pssSexo;
}
public void setPssSexo(String pssSexo) {
this.pssSexo = pssSexo;
}
public String getPssEstadoCivil() {
return pssEstadoCivil;
}
public void setPssEstadoCivil(String pssEstadoCivil) {
this.pssEstadoCivil = pssEstadoCivil;
}
public String getPssNatural() {
return pssNatural;
}
public void setPssNatural(String pssNatural) {
this.pssNatural = pssNatural;
}
public String getPssTelRes() {
return pssTelRes;
}
public void setPssTelRes(String pssTelRes) {
this.pssTelRes = pssTelRes;
}
public String getPssTelCel() {
return pssTelCel;
}
public void setPssTelCel(String pssTelCel) {
this.pssTelCel = pssTelCel;
}
public String getPssTelCom() {
return pssTelCom;
}
public void setPssTelCom(String pssTelCom) {
this.pssTelCom = pssTelCom;
}
public String getPssRg() {
return pssRg;
}
public void setPssRg(String pssRg) {
this.pssRg = pssRg;
}
public String getPssCpf() {
return pssCpf;
}
public void setPssCpf(String pssCpf) {
this.pssCpf = pssCpf;
}
public String getPssEmail() {
return pssEmail;
}
public void setPssEmail(String pssEmail) {
this.pssEmail = pssEmail;
}
public String getPssOrigem() {
return pssOrigem;
}
public void setPssOrigem(String pssOrigem) {
this.pssOrigem = pssOrigem;
}
public Date getPssCadastro() {
return pssCadastro;
}
public void setPssCadastro(Date pssCadastro) {
this.pssCadastro = pssCadastro;
}
@XmlTransient
public List<CadAluno> getCadAlunoList() {
return cadAlunoList;
}
public void setCadAlunoList(List<CadAluno> cadAlunoList) {
this.cadAlunoList = cadAlunoList;
}
@XmlTransient
public List<CadFornecedor> getCadFornecedorList() {
return cadFornecedorList;
}
public void setCadFornecedorList(List<CadFornecedor> cadFornecedorList) {
this.cadFornecedorList = cadFornecedorList;
}
@XmlTransient
public List<CadFichaMedica> getCadFichaMedicaList() {
return cadFichaMedicaList;
}
public void setCadFichaMedicaList(List<CadFichaMedica> cadFichaMedicaList) {
this.cadFichaMedicaList = cadFichaMedicaList;
}
@XmlTransient
public List<CadFuncionario> getCadFuncionarioList() {
return cadFuncionarioList;
}
public void setCadFuncionarioList(List<CadFuncionario> cadFuncionarioList) {
this.cadFuncionarioList = cadFuncionarioList;
}
public CadEndereco getCadEndereco() {
return cadEndereco;
}
public void setCadEndereco(CadEndereco cadEndereco) {
this.cadEndereco = cadEndereco;
}
@Override
public int hashCode() {
int hash = 0;
hash += (pssCodigo != null ? pssCodigo.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 CadPessoa)) {
return false;
}
CadPessoa other = (CadPessoa) object;
if ((this.pssCodigo == null && other.pssCodigo != null) || (this.pssCodigo != null && !this.pssCodigo.equals(other.pssCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.usinaweb.secom.entity.CadPessoa[ pssCodigo=" + pssCodigo + " ]";
}
public Integer getPssCodigoImportacao() {
return pssCodigoImportacao;
}
public void setPssCodigoImportacao(Integer pssCodigoImportacao) {
this.pssCodigoImportacao = pssCodigoImportacao;
}
public String getPssObservacao() {
return pssObservacao;
}
public void setPssObservacao(String pssObservacao) {
this.pssObservacao = pssObservacao;
}
}