Boa noite amigos tenho uma Classe produto que tem alguns relacionamentos como grupo, sub-grupo, unidade, marcas e etcs, quando vou incluir esse objeto na base de dados o mesmo verifica relacionamento para depois incluir o registro isso esta deixando o cadastro lento para finalização tem alguma forma de acelerar esse processo ?
jdbc,jpa,hibernate,está usando oque???
JPA com Hibernate
A melhor solução para estes casos e criar uma SP para inclusão.
Dá uma estudada em Cascade e veja se dá para mapear novamente as classes usando o que aprendeu.
Mesmo utilizando o cascade esta demorando para persistir
veja meu modelo
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "PRODUTO")
public class Produto implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private long id;
@Column(name = "TIPO")
private String tipo;
@Column(name = "COMPOSTA")
private boolean composta;
@Column(name = "CODIGO")
private String codigo;
@Column(name = "REFERENCIA")
private String referencia;
@Column(name = "DESCRICAO")
private String descricao;
@Column(name = "PRECO_COMPRA")
private double preco_compra;
@Column(name = "LUCRO")
private double lucro;
@Column(name = "PRECO_VENDA")
private double preco_venda;
@Column(name = "GARANTIA")
private int garantia;
@Column(name = "CONVERSAO_UN")
private boolean conversao_un;
@Column(name = "DT_ALTERACAO")
@Temporal(TemporalType.DATE)
private Calendar dt_altercao;
@Column(name = "DT_CADASTRO")
@Temporal(TemporalType.DATE)
private Calendar dt_cadastro;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDFORNECEDOR")
private Fornecedor fornecedor;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDGRUPO_PRODUTO")
private GrupoProduto grupo_produto;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDSUBGRUPO_PRODUTO")
private SubgrupoProduto subgrupo_produto;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDMARCA_PRODUTO")
private MarcaProduto marca_produto;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDNCM")
private Ncm ncm;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "IDUNIDADE")
private Unidade unidade;
@Column(name = "ESTADO")
private boolean estado;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public boolean isComposta() {
return composta;
}
public void setComposta(boolean composta) {
this.composta = composta;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getReferencia() {
return referencia;
}
public void setReferencia(String referencia) {
this.referencia = referencia;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public double getLucro() {
return lucro;
}
public void setLucro(double lucro) {
this.lucro = lucro;
}
public double getPreco_venda() {
return preco_venda;
}
public void setPreco_venda(double preco_venda) {
this.preco_venda = preco_venda;
}
public int getGarantia() {
return garantia;
}
public void setGarantia(int garantia) {
this.garantia = garantia;
}
public boolean isConversao_un() {
return conversao_un;
}
public void setConversao_un(boolean conversao_un) {
this.conversao_un = conversao_un;
}
public Calendar getDt_altercao() {
return dt_altercao;
}
public void setDt_altercao(Calendar dt_altercao) {
this.dt_altercao = dt_altercao;
}
public Calendar getDt_cadastro() {
return dt_cadastro;
}
public void setDt_cadastro(Calendar dt_cadastro) {
this.dt_cadastro = dt_cadastro;
}
public Fornecedor getFornecedor() {
return fornecedor;
}
public void setFornecedor(Fornecedor fornecedor) {
this.fornecedor = fornecedor;
}
public GrupoProduto getGrupo_produto() {
return grupo_produto;
}
public void setGrupo_produto(GrupoProduto grupo_produto) {
this.grupo_produto = grupo_produto;
}
public SubgrupoProduto getSubgrupo_produto() {
return subgrupo_produto;
}
public void setSubgrupo_produto(SubgrupoProduto subgrupo_produto) {
this.subgrupo_produto = subgrupo_produto;
}
public MarcaProduto getMarca_produto() {
return marca_produto;
}
public void setMarca_produto(MarcaProduto marca_produto) {
this.marca_produto = marca_produto;
}
public Ncm getNcm() {
return ncm;
}
public void setNcm(Ncm ncm) {
this.ncm = ncm;
}
public Unidade getUnidade() {
return unidade;
}
public void setUnidade(Unidade unidade) {
this.unidade = unidade;
}
public boolean isEstado() {
return estado;
}
public void setEstado(boolean estado) {
this.estado = estado;
}
public double getPreco_compra() {
return preco_compra;
}
public void setPreco_compra(double preco_compra) {
this.preco_compra = preco_compra;
}
}
Esta demorando 19.174 Segundos para efetuar o insert pois ele verifica cada tabela que tem relacionamento.
esta fazendo todo esse processo para depois persistir
Hibernate:
select
fornecedor0_.ID as ID348_,
fornecedor0_.BAIRRO as BAIRRO348_,
fornecedor0_.CELULAR as CELULAR348_,
fornecedor0_.CEP as CEP348_,
fornecedor0_.IDCIDADE as IDCIDADE348_,
fornecedor0_.CPF_CNPJ as CPF5_348_,
fornecedor0_.DT_ALTERACAO as DT6_348_,
fornecedor0_.DT_CADASTRO as DT7_348_,
fornecedor0_.EMAIL as EMAIL348_,
fornecedor0_.ESTADO as ESTADO348_,
fornecedor0_.NOME as NOME348_,
fornecedor0_.NUMERO as NUMERO348_,
fornecedor0_.OBSERVACAO as OBSERVACAO348_,
fornecedor0_.RG_IE as RG13_348_,
fornecedor0_.RUA as RUA348_,
fornecedor0_.TELEFONE as TELEFONE348_,
fornecedor0_.TIPO as TIPO348_
from
FORNECEDOR fornecedor0_
where
fornecedor0_.ID=6 limit ?
Hibernate:
select
cidade0_.ID as ID358_1_,
cidade0_.CEP as CEP358_1_,
cidade0_.IDESTADO as IDESTADO358_1_,
cidade0_.IBGE as IBGE358_1_,
cidade0_.NOME as NOME358_1_,
estado1_.ID as ID352_0_,
estado1_.IBGE as IBGE352_0_,
estado1_.ICMS as ICMS352_0_,
estado1_.IPI as IPI352_0_,
estado1_.NOME as NOME352_0_,
estado1_.SIGLA as SIGLA352_0_
from
CIDADE cidade0_
left outer join
ESTADO estado1_
on cidade0_.IDESTADO=estado1_.ID
where
cidade0_.ID=?
Hibernate:
select
grupoprodu0_.ID as ID421_,
grupoprodu0_.NOME as NOME421_
from
GRUPO_PRODUTO grupoprodu0_
where
grupoprodu0_.ID=6 limit ?
Hibernate:
select
subgrupopr0_.ID as ID489_,
subgrupopr0_.IDGRUPO_PRODUTO as IDGRUPO3_489_,
subgrupopr0_.NOME as NOME489_
from
SUBGRUPO_PRODUTO subgrupopr0_
where
subgrupopr0_.ID=9 limit ?
Hibernate:
select
grupoprodu0_.ID as ID479_0_,
grupoprodu0_.NOME as NOME479_0_
from
GRUPO_PRODUTO grupoprodu0_
where
grupoprodu0_.ID=?
Hibernate:
select
marcaprodu0_.ID as ID545_,
marcaprodu0_.NOME as NOME545_
from
MARCA_PRODUTO marcaprodu0_
where
marcaprodu0_.ID=16 limit ?
Hibernate:
select
ncm0_.ID as ID607_,
ncm0_.CODIGO as CODIGO607_,
ncm0_.DESCRICAO as DESCRICAO607_
from
NCM ncm0_
where
ncm0_.ID=1 limit ?
Hibernate:
select
unidade0_.ID as ID644_,
unidade0_.CODIGO as CODIGO644_,
unidade0_.NOME as NOME644_
from
UNIDADE unidade0_
where
unidade0_.ID=1 limit ?
Salvando...
Hibernate:
insert
into
PRODUTO
(CODIGO, COMPOSTA, CONVERSAO_UN, DESCRICAO, DT_ALTERACAO, DT_CADASTRO, ESTADO, IDFORNECEDOR, GARANTIA, IDGRUPO_PRODUTO, LUCRO, IDMARCA_PRODUTO, IDNCM, PRECO_COMPRA, PRECO_VENDA, REFERENCIA, IDSUBGRUPO_PRODUTO, TIPO, IDUNIDADE)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
19.174 Segundos
Dá uma estudada em Cascade e veja qual é o melhor para os seus relacionamentos usando o que aprendeu.
Quando você cadastra um produto, irá atualizar o fornecedor? Precisa atualizar um grupo ou subgrupo?
Não preciso somente cadastrar o produto as outras entidades é somente para relacionamento.