"Hibernate" Otimizar consultas geradas pelo Criteria

6 respostas
P

Pessoal gostaria de otimizar as consultas geradas pelo criteria do hibernate.

Para explicar meu problema vou utilizar a entidade ContasReceber do meu sistema.

Possuo uma Entitade chamada ContasReceber que se relaciona com mais outras entidades: Cliente, Natureza, Empresa, TipoDocumento.
Quando executo uma consulta, a SQL gerada retorna para mim todos os relacionamentos das minha entidades que estão envolvida na consulta. Ou seja se minha entidade Cliente que se relaciona com mais ou três entidades ela esta me trazendo o join desses outras entidade etc..., se o TipoDocumento se relacionada com outras entidades também esta me trazendo o join com essas entidades, fazendo com que a consulta se torne mais lenta e grande

Eu so queria o SQL viesse somente os JOINS envolvidos na Entidade ContasReceber ou seja Cliente, Natureza, Empresa e TipoDocumento

Segue abaixo minha entidade ContasReceber. Repetindo somente gostaria que meu SQL retorna-se os Join envolvidos nessa entidade ContasReceber

package oberon.dominio;


import java.util.Date;
import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.ManyToOne;
import javax.persistence.FetchType;
import javax.persistence.Lob;
import javax.persistence.JoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;

import javax.persistence.TemporalType;

import javax.swing.Icon;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.appbuilder.swing.annotation.DisplayField;

import oberon.commons.Alias;

/**
 * Bean que representa a tabela CONTASRECEBER na base de dados
 *
 * @version 1.0
 * @author Paulo Vinícius Moreira Dutra
 */
@javax.persistence.Entity
@org.hibernate.annotations.Entity(optimisticLock = org.hibernate.annotations.OptimisticLockType.VERSION,
                dynamicUpdate = true)
@Table(name = "CONTASRECEBER")
public class ContasReceber extends VersionPersistentObject implements Cloneable {

    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "CODRECEBER")  
    private Integer codreceber;

    @Column(name = "PREFIXO", length=3)  
    private String prefixo;

    @Column(name = "BANCO", length=5) 
    private String banco;

    @Column(name = "AGENCIA", length=20) 
    private String agencia;

    @Column(name = "NUMERODOC", length=20)  
    private String numerodoc;

    @Column(name = "NUMEROCONTA", length=10)  
    private String numeroconta;

    @Column(name = "EMITENTE", length=60)   
    private String emitente;

    @Column(unique=true, name = "CPFCNPJ", length=18)
    private String cpfcnpj;

    @Column(name = "PARCELA", length=3)
    private Integer parcela;

    @Column(name = "EMISSAO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date emissao;

    @Column(name = "VENCIMENTO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date vencimento;
    
    @Column(name = "VENCIMENTOREAL")
    @Temporal(TemporalType.TIMESTAMP)
    private Date vencimentoreal;

    @Column(name = "VALOR")  
    private BigDecimal valor;

    @Column(name = "ACRESCIMOS")  
    private BigDecimal acrescimos;

    @Column(name = "DESCONTOS")   
    private BigDecimal descontos;

    @Column(name = "VALORTOTAL")  
    private BigDecimal valortotal;

    @Column(name = "SALDO") 
    private BigDecimal saldo;

    @Lob
    @Column(name = "OBSERVACAO")  
    private String observacao;
    
    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="CODCLIENTE", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="CLI")
    private Cliente codcliente;
    
    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="CODEMPRESA", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="EMP")
    private Empresa codempresa;

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="CODLIQUIDACAO", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="LIQUIQ")
    private Liquidacao codliquidacao;

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="LIQUIDACAOBAIXADA", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="LIQUIQB")
    private Liquidacao liquidacaoBaixada;

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="CODNATUREZA", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="NAT")
    private Natureza codnatureza;

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name="CODTIPODOCUMENTO", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Alias(name="TD")
    private TipoDocumento codtipodocumento;
  
    private transient Icon icon = null;

    private transient int selecionado = 0;

    public ContasReceber(){
        selecionado = 0;
        valor = new BigDecimal(0);
        descontos = new BigDecimal(0);
        acrescimos = new BigDecimal(0);
        saldo  = new BigDecimal(0);
        valortotal  = new BigDecimal(0);
    }

    public ContasReceber(Integer codreceber) {
        this.codreceber = codreceber;
    }

    public Integer getCodreceber() {
        return codreceber;
    }

    public void setCodreceber(Integer codreceber) {
        this.codreceber = codreceber;
    }

    public String getPrefixo() {
        return prefixo;
    }

    public void setPrefixo(String prefixo) {
        this.prefixo = prefixo;
    }

    public String getBanco() {
        return banco;
    }

    public void setBanco(String banco) {
        this.banco = banco;
    }

    public String getNumerodoc() {
        return numerodoc;
    }

    public void setNumerodoc(String numerodoc) {
        this.numerodoc = numerodoc;
    }

    public String getNumeroconta() {
        return numeroconta;
    }

    public void setNumeroconta(String numeroconta) {
        this.numeroconta = numeroconta;
    }

    public String getEmitente() {
        return emitente;
    }

    public void setEmitente(String emitente) {
        this.emitente = emitente;
    }

    public Integer getParcela() {
        return parcela;
    }

    public void setParcela(Integer parcela) {
        this.parcela = parcela;
    }

    public Date getEmissao() {
        return emissao;
    }

    public void setEmissao(Date emissao) {
        this.emissao = emissao;
    }

    public Date getVencimento() {
        return vencimento;
    }

    public void setVencimento(Date vencimento) {
        this.vencimento = vencimento;
    }

    public Date getVencimentoreal() {
        return vencimentoreal;
    }

    public void setVencimentoreal(Date vencimentoreal) {
        this.vencimentoreal = vencimentoreal;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getAcrescimos() {
        return acrescimos;
    }

    public void setAcrescimos(BigDecimal acrescimos) {
        this.acrescimos = acrescimos;
    }

    public BigDecimal getDescontos() {
        return descontos;
    }

    public void setDescontos(BigDecimal descontros) {
        this.descontos = descontros;
    }

    public BigDecimal getValortotal() {
        return valortotal;
    }

    public void setValortotal(BigDecimal valortotal) {
        this.valortotal = valortotal;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    } 

    public Cliente getCodcliente() {
        return codcliente;
    }

    public void setCodcliente(Cliente codcliente) {
        this.codcliente = codcliente;
    }

    public Empresa getCodempresa() {
        return codempresa;
    }

    public void setCodempresa(Empresa codempresa) {
        this.codempresa = codempresa;
    }

    public Liquidacao getCodliquidacao() {
        return codliquidacao;
    }

    public void setCodliquidacao(Liquidacao codliquidacao) {
        this.codliquidacao = codliquidacao;
    }

    public Natureza getCodnatureza() {
        return codnatureza;
    }

    public void setCodnatureza(Natureza codnatureza) {
        this.codnatureza = codnatureza;
    }

    public TipoDocumento getCodtipodocumento() {
        return codtipodocumento;
    }

    public void setCodtipodocumento(TipoDocumento codtipodocumento) {
        this.codtipodocumento = codtipodocumento;
    }  

    @Override
    public String toString() {
        return "oberon.dominio.ContasReceber[codreceber=" + codreceber + "]";
    }

    /**
     * @return the icon
     */
    public Icon getIcon() {
        return icon;
    }

    /**
     * @param icon the icon to set
     */
    public void setIcon(Icon icon) {
        this.icon = icon;
    }

    /**
     * @return the selecionado
     */
    public int getSelecionado() {
        return selecionado;
    }

    /**
     * @param selecionado the selecionado to set
     */
    public void setSelecionado(int selecionado) {
        this.selecionado = selecionado;
    }

    /**
     * @return the agencia
     */
    public String getAgencia() {
        return agencia;
    }

    /**
     * @param agencia the agencia to set
     */
    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }

    /**
     * @return the cpfCnpj
     */
    public String getCpfcnpj() {
        return cpfcnpj;
    }

    /**
     * @param cpfCnpj the cpfCnpj to set
     */
    public void setCpfcnpj(String cpfCnpj) {
        this.cpfcnpj = cpfCnpj;
    }

    /**
     * @return the liquidacaoBaixada
     */
    public Liquidacao getLiquidacaoBaixada() {
        return liquidacaoBaixada;
    }

    /**
     * @param liquidacaoBaixada the liquidacaoBaixada to set
     */
    public void setLiquidacaoBaixada(Liquidacao liquidacaoBaixada) {
        this.liquidacaoBaixada = liquidacaoBaixada;
    }

    /**
     * @return the saldo
     */
    public BigDecimal getSaldo() {
        return saldo;
    }

    /**
     * @param saldo the saldo to set
     */
    public void setSaldo(BigDecimal saldo) {
        this.saldo = saldo;
    }    
}

Vejam o SQL Monstruoso que é gerado

9/07/09 17:53  DEBUG [p: thread-pool-1; w: 7] (AbstractBatcher.java:401) - select this_.CODRECEBER as CODRECEBER4_22_, this_.EXCLUSIVO as EXCLUSIVO4_22_, this_.VERSION as VERSION4_22_, this_.REC_DEL as REC4_4_22_, this_.ACRESCIMOS as ACRESCIMOS4_22_, this_.AGENCIA as AGENCIA4_22_, this_.BANCO as BANCO4_22_, this_.CODCLIENTE as CODCLIENTE4_22_, this_.CODEMPRESA as CODEMPRESA4_22_, this_.CODLIQUIDACAO as CODLIQU24_4_22_, this_.CODNATUREZA as CODNATU25_4_22_, this_.CODTIPODOCUMENTO as CODTIPO26_4_22_, this_.CPFCNPJ as CPFCNPJ4_22_, this_.DESCONTOS as DESCONTOS4_22_, this_.EMISSAO as EMISSAO4_22_, this_.EMITENTE as EMITENTE4_22_, this_.LIQUIDACAOBAIXADA as LIQUIDA27_4_22_, this_.NUMEROCONTA as NUMEROC12_4_22_, this_.NUMERODOC as NUMERODOC4_22_, this_.OBSERVACAO as OBSERVACAO4_22_, this_.PARCELA as PARCELA4_22_, this_.PREFIXO as PREFIXO4_22_, this_.SALDO as SALDO4_22_, this_.VALOR as VALOR4_22_, this_.VALORTOTAL as VALORTOTAL4_22_, this_.VENCIMENTO as VENCIMENTO4_22_, this_.VENCIMENTOREAL as VENCIME21_4_22_, cliente2_.CODCLIENTE as CODCLIENTE3_0_, cliente2_.EXCLUSIVO as EXCLUSIVO3_0_, cliente2_.VERSION as VERSION3_0_, cliente2_.REC_DEL as REC4_3_0_, cliente2_.CODBAIRRO as CODBAIRRO3_0_, cliente2_.CODCIDADE as CODCIDADE3_0_, cliente2_.CODENDERECO as CODENDE34_3_0_, cliente2_.CODNACIONALIDADE as CODNACI35_3_0_, cliente2_.CODNATUREZA as CODNATU36_3_0_, cliente2_.CODVENDEDOR as CODVEND37_3_0_, cliente2_.COMPLEMENTO as COMPLEME5_3_0_, cliente2_.CONTATO as CONTATO3_0_, cliente2_.CPFCNPJ as CPFCNPJ3_0_, cliente2_.DATACADASTRO as DATACADA8_3_0_, cliente2_.DATANASC as DATANASC3_0_, cliente2_.EMAIL1 as EMAIL10_3_0_, cliente2_.EMAIL2 as EMAIL11_3_0_, cliente2_.EMAIL3 as EMAIL12_3_0_, cliente2_.ENDCOBRANCA as ENDCOBR13_3_0_, cliente2_.ENDRECEBIMENTO as ENDRECE14_3_0_, cliente2_.CODESTADO as CODESTADO3_0_, cliente2_.ESTCIVIL as ESTCIVIL3_0_, cliente2_.HOMEPAGE as HOMEPAGE3_0_, cliente2_.HORACADASTRO as HORACAD17_3_0_, cliente2_.INCSMUNICIPAL as INCSMUN18_3_0_, cliente2_.INSCRURAL as INSCRURAL3_0_, cliente2_.LIMITECREDITO as LIMITEC20_3_0_, cliente2_.NOME as NOME3_0_, cliente2_.NOMEFANTASIA as NOMEFAN22_3_0_, cliente2_.NOMEMAE as NOMEMAE3_0_, cliente2_.NOMEPAI as NOMEPAI3_0_, cliente2_.NUMERO as NUMERO3_0_, cliente2_.OBSERVACAO as OBSERVACAO3_0_, cliente2_.CODPAIS as CODPAIS3_0_, cliente2_.RGIE as RGIE3_0_, cliente2_.SEXO as SEXO3_0_, cliente2_.SITUACAO as SITUACAO3_0_, cliente2_.TIPOCLIENTE as TIPOCLI30_3_0_, cliente2_.TIPO as TIPO3_0_, bairro3_.CODBAIRRO as CODBAIRRO0_1_, bairro3_.EXCLUSIVO as EXCLUSIVO0_1_, bairro3_.VERSION as VERSION0_1_, bairro3_.REC_DEL as REC4_0_1_, bairro3_.NOME as NOME0_1_, cidade4_.CODCIDADE as CODCIDADE2_2_, cidade4_.CODESTADO as CODESTADO2_2_, cidade4_.CODIBGE as CODIBGE2_2_, cidade4_.CODREGIAO as CODREGIAO2_2_, cidade4_.EXCLUSIVO as EXCLUSIVO2_2_, cidade4_.NOME as NOME2_2_, cidade4_.VERSION as VERSION2_2_, cidade4_.REC_DEL as REC6_2_2_, estado5_.CODESTADO as CODESTADO7_3_, estado5_.CODPAIS as CODPAIS7_3_, estado5_.EXCLUSIVO as EXCLUSIVO7_3_, estado5_.NOME as NOME7_3_, estado5_.VERSION as VERSION7_3_, estado5_.REC_DEL as REC5_7_3_, estado5_.SIGLA as SIGLA7_3_, pais6_.CODPAIS as CODPAIS12_4_, pais6_.EXCLUSIVO as EXCLUSIVO12_4_, pais6_.VERSION as VERSION12_4_, pais6_.REC_DEL as REC4_12_4_, pais6_.NOME as NOME12_4_, regiao7_.CODREGIAO as CODREGIAO14_5_, regiao7_.EXCLUSIVO as EXCLUSIVO14_5_, regiao7_.VERSION as VERSION14_5_, regiao7_.REC_DEL as REC4_14_5_, regiao7_.DESCRICAO as DESCRICAO14_5_, endereco8_.CODENDERECO as CODENDER1_6_6_, endereco8_.CEP as CEP6_6_, endereco8_.CODBAIRRO as CODBAIRRO6_6_, endereco8_.CODCIDADE as CODCIDADE6_6_, endereco8_.CODTIPOLOGRADOURO as CODTIPO11_6_6_, endereco8_.COMPLEMENTO as COMPLEME3_6_6_, endereco8_.EXCLUSIVO as EXCLUSIVO6_6_, endereco8_.NOME as NOME6_6_, endereco8_.VERSION as VERSION6_6_, endereco8_.REC_DEL as REC7_6_6_, endereco8_.TIPO as TIPO6_6_, bairro9_.CODBAIRRO as CODBAIRRO0_7_, bairro9_.EXCLUSIVO as EXCLUSIVO0_7_, bairro9_.VERSION as VERSION0_7_, bairro9_.REC_DEL as REC4_0_7_, bairro9_.NOME as NOME0_7_, cidade10_.CODCIDADE as CODCIDADE2_8_, cidade10_.CODESTADO as CODESTADO2_8_, cidade10_.CODIBGE as CODIBGE2_8_, cidade10_.CODREGIAO as CODREGIAO2_8_, cidade10_.EXCLUSIVO as EXCLUSIVO2_8_, cidade10_.NOME as NOME2_8_, cidade10_.VERSION as VERSION2_8_, cidade10_.REC_DEL as REC6_2_8_, tipolograd11_.CODTIPOLOGRADOURO as CODTIPOL1_17_9_, tipolograd11_.DESCRICAO as DESCRICAO17_9_, tipolograd11_.EXCLUSIVO as EXCLUSIVO17_9_, tipolograd11_.VERSION as VERSION17_9_, tipolograd11_.REC_DEL as REC5_17_9_, tipolograd11_.SIGLA as SIGLA17_9_, nacionalid12_.CODNACIONALIDADE as CODNACIO1_10_10_, nacionalid12_.EXCLUSIVO as EXCLUSIVO10_10_, nacionalid12_.VERSION as VERSION10_10_, nacionalid12_.REC_DEL as REC4_10_10_, nacionalid12_.DESCRICAO as DESCRICAO10_10_, natureza13_.CODNATUREZA as CODNATUR1_11_11_, natureza13_.EXCLUSIVO as EXCLUSIVO11_11_, natureza13_.VERSION as VERSION11_11_, natureza13_.REC_DEL as REC4_11_11_, natureza13_.DESCRICAO as DESCRICAO11_11_, natureza13_.IDENTIFICACAO as IDENTIFI6_11_11_, vendedor14_.CODVENDEDOR as CODVENDE1_19_12_, vendedor14_.EXCLUSIVO as EXCLUSIVO19_12_, vendedor14_.VERSION as VERSION19_12_, vendedor14_.REC_DEL as REC4_19_12_, estado15_.CODESTADO as CODESTADO7_13_, estado15_.CODPAIS as CODPAIS7_13_, estado15_.EXCLUSIVO as EXCLUSIVO7_13_, estado15_.NOME as NOME7_13_, estado15_.VERSION as VERSION7_13_, estado15_.REC_DEL as REC5_7_13_, estado15_.SIGLA as SIGLA7_13_, pais16_.CODPAIS as CODPAIS12_14_, pais16_.EXCLUSIVO as EXCLUSIVO12_14_, pais16_.VERSION as VERSION12_14_, pais16_.REC_DEL as REC4_12_14_, pais16_.NOME as NOME12_14_, empresa17_.CODEMPRESA as CODEMPRESA5_15_, empresa17_.EXCLUSIVO as EXCLUSIVO5_15_, empresa17_.VERSION as VERSION5_15_, empresa17_.REC_DEL as REC4_5_15_, empresa17_.NOME as NOME5_15_, liquidacao18_.CODLIQUIDACAO as CODLIQUI1_8_16_, liquidacao18_.EXCLUSIVO as EXCLUSIVO8_16_, liquidacao18_.VERSION as VERSION8_16_, liquidacao18_.REC_DEL as REC4_8_16_, liquidacao18_.ACRESCIMOS as ACRESCIMOS8_16_, liquidacao18_.CODCLIENTE as CODCLIENTE8_16_, liquidacao18_.CODNATUREZA as CODNATU12_8_16_, liquidacao18_.DATA as DATA8_16_, liquidacao18_.DESCONTOS as DESCONTOS8_16_, liquidacao18_.MULTA as MULTA8_16_, liquidacao18_.VALOR as VALOR8_16_, liquidacao18_.VALORTOTAL as VALORTOTAL8_16_, cliente19_.CODCLIENTE as CODCLIENTE3_17_, cliente19_.EXCLUSIVO as EXCLUSIVO3_17_, cliente19_.VERSION as VERSION3_17_, cliente19_.REC_DEL as REC4_3_17_, cliente19_.CODBAIRRO as CODBAIRRO3_17_, cliente19_.CODCIDADE as CODCIDADE3_17_, cliente19_.CODENDERECO as CODENDE34_3_17_, cliente19_.CODNACIONALIDADE as CODNACI35_3_17_, cliente19_.CODNATUREZA as CODNATU36_3_17_, cliente19_.CODVENDEDOR as CODVEND37_3_17_, cliente19_.COMPLEMENTO as COMPLEME5_3_17_, cliente19_.CONTATO as CONTATO3_17_, cliente19_.CPFCNPJ as CPFCNPJ3_17_, cliente19_.DATACADASTRO as DATACADA8_3_17_, cliente19_.DATANASC as DATANASC3_17_, cliente19_.EMAIL1 as EMAIL10_3_17_, cliente19_.EMAIL2 as EMAIL11_3_17_, cliente19_.EMAIL3 as EMAIL12_3_17_, cliente19_.ENDCOBRANCA as ENDCOBR13_3_17_, cliente19_.ENDRECEBIMENTO as ENDRECE14_3_17_, cliente19_.CODESTADO as CODESTADO3_17_, cliente19_.ESTCIVIL as ESTCIVIL3_17_, cliente19_.HOMEPAGE as HOMEPAGE3_17_, cliente19_.HORACADASTRO as HORACAD17_3_17_, cliente19_.INCSMUNICIPAL as INCSMUN18_3_17_, cliente19_.INSCRURAL as INSCRURAL3_17_, cliente19_.LIMITECREDITO as LIMITEC20_3_17_, cliente19_.NOME as NOME3_17_, cliente19_.NOMEFANTASIA as NOMEFAN22_3_17_, cliente19_.NOMEMAE as NOMEMAE3_17_, cliente19_.NOMEPAI as NOMEPAI3_17_, cliente19_.NUMERO as NUMERO3_17_, cliente19_.OBSERVACAO as OBSERVACAO3_17_, cliente19_.CODPAIS as CODPAIS3_17_, cliente19_.RGIE as RGIE3_17_, cliente19_.SEXO as SEXO3_17_, cliente19_.SITUACAO as SITUACAO3_17_, cliente19_.TIPOCLIENTE as TIPOCLI30_3_17_, cliente19_.TIPO as TIPO3_17_, natureza20_.CODNATUREZA as CODNATUR1_11_18_, natureza20_.EXCLUSIVO as EXCLUSIVO11_18_, natureza20_.VERSION as VERSION11_18_, natureza20_.REC_DEL as REC4_11_18_, natureza20_.DESCRICAO as DESCRICAO11_18_, natureza20_.IDENTIFICACAO as IDENTIFI6_11_18_, natureza21_.CODNATUREZA as CODNATUR1_11_19_, natureza21_.EXCLUSIVO as EXCLUSIVO11_19_, natureza21_.VERSION as VERSION11_19_, natureza21_.REC_DEL as 
REC4_11_19_, natureza21_.DESCRICAO as DESCRICAO11_19_, natureza21_.IDENTIFICACAO as IDENTIFI6_11_19_, tipodocume22_.CODTIPODOCUMENTO as CODTIPOD1_16_20_, tipodocume22_.EXCLUSIVO as EXCLUSIVO16_20_, tipodocume22_.VERSION as VERSION16_20_, tipodocume22_.REC_DEL as REC4_16_20_, tipodocume22_.DESCRICAO as DESCRICAO16_20_, tipodocume22_.SIGLA as SIGLA16_20_, liquidacao23_.CODLIQUIDACAO as CODLIQUI1_8_21_, liquidacao23_.EXCLUSIVO as EXCLUSIVO8_21_, liquidacao23_.VERSION as VERSION8_21_, liquidacao23_.REC_DEL as REC4_8_21_, liquidacao23_.ACRESCIMOS as ACRESCIMOS8_21_, liquidacao23_.CODCLIENTE as CODCLIENTE8_21_, liquidacao23_.CODNATUREZA as CODNATU12_8_21_, liquidacao23_.DATA as DATA8_21_, liquidacao23_.DESCONTOS as DESCONTOS8_21_, liquidacao23_.MULTA as MULTA8_21_, liquidacao23_.VALOR as VALOR8_21_, liquidacao23_.VALORTOTAL as VALORTOTAL8_21_ from CONTASRECEBER this_ left outer join CLIENTE cliente2_ on this_.CODCLIENTE=cliente2_.CODCLIENTE left outer join BAIRRO bairro3_ on cliente2_.CODBAIRRO=bairro3_.CODBAIRRO left outer join CIDADE cidade4_ on cliente2_.CODCIDADE=cidade4_.CODCIDADE left outer join ESTADO estado5_ on cidade4_.CODESTADO=estado5_.CODESTADO left outer join PAIS pais6_ on estado5_.CODPAIS=pais6_.CODPAIS left outer join REGIAO regiao7_ on cidade4_.CODREGIAO=regiao7_.CODREGIAO left outer join ENDERECO endereco8_ on cliente2_.CODENDERECO=endereco8_.CODENDERECO left outer join BAIRRO bairro9_ on endereco8_.CODBAIRRO=bairro9_.CODBAIRRO left outer join CIDADE cidade10_ on endereco8_.CODCIDADE=cidade10_.CODCIDADE left outer join TIPOLOGRADOURO tipolograd11_ on endereco8_.CODTIPOLOGRADOURO=tipolograd11_.CODTIPOLOGRADOURO left outer join NACIONALIDADE nacionalid12_ on cliente2_.CODNACIONALIDADE=nacionalid12_.CODNACIONALIDADE left outer join NATUREZA natureza13_ on cliente2_.CODNATUREZA=natureza13_.CODNATUREZA left outer join VENDEDOR vendedor14_ on cliente2_.CODVENDEDOR=vendedor14_.CODVENDEDOR left outer join ESTADO estado15_ on cliente2_.CODESTADO=estado15_.CODESTADO left outer join PAIS pais16_ on cliente2_.CODPAIS=pais16_.CODPAIS left outer join EMPRESA empresa17_ on this_.CODEMPRESA=empresa17_.CODEMPRESA left outer join LIQUIDACAO liquidacao18_ on this_.CODLIQUIDACAO=liquidacao18_.CODLIQUIDACAO left outer join CLIENTE cliente19_ on liquidacao18_.CODCLIENTE=cliente19_.CODCLIENTE left outer join NATUREZA natureza20_ on liquidacao18_.CODNATUREZA=natureza20_.CODNATUREZA left outer join NATUREZA natureza21_ on this_.CODNATUREZA=natureza21_.CODNATUREZA left outer join TIPODOCUMENTO tipodocume22_ on this_.CODTIPODOCUMENTO=tipodocume22_.CODTIPODOCUMENTO left outer join LIQUIDACAO liquidacao23_ on this_.LIQUIDACAOBAIXADA=liquidacao23_.CODLIQUIDACAO where this_.NUMEROCONTA>?

6 Respostas

P

Ola

Voce pode postar pra gente qual consulta voce esta fazendo? É um HQL/Criteria por “numeroconta”? Qual exatamente?

P

Estou usando Criteria

Criteria criteria = session.createCriteria(ContasReceber.class);
       
       if (criteria!=null){
            try{
                log.info("Executando criteria: " + criteria.toString() + "Class: " + criteria);
                criteria.add(org.hibernate.criterion.Restrictions.eq("numeroConta", 1));
                return criteria.list();
            }catch(HibernateException ex){
                ex.printStackTrace();
                throw HibernateUtil.convertHibernateAccessException(ex);                
            }
        }
P

paulo, tire o @Fetch(FetchMode.JOIN) dos atributos que você não quer que venham nessa query.

P

Obrigado pela dica xará rsss. Funcionou do jeito que eu queria, mais tive que mudar o elemento
fetch = FetchType.LAZY para fetch = FetchType.EAGER pois estava me gerando o erro de LazyLoadingException.
Agora ta perfeito

P

paulofafism:
Funcionou do jeito que eu queria, mais tive que mudar o elemento
fetch = FetchType.LAZY para fetch = FetchType.EAGER pois estava me gerando o erro de LazyLoadingException.
Agora ta perfeito

Cuidado Paulo! Agora, apesar de ele nao estar fazendo join para buscar as outras entidades relacionadas, ele esta sim buscando-as antes mesmo de precisar. O melhor é deixar lazy, e utilize o open session in view para nao tomar o LazyInitializationException:
https://www.hibernate.org/43.html

E de uma olhada em algumas dicas que escrevi sobre o hibernate ha algum tempo:

P

Fala paulo

Esse padrão Open Session View somente é aplicado para projetos web? Pois o projeto que estou fazendo e uma aplicação Desktop. Estou utilizando Glassfish +EJB e SQLServer para esse projeto, so futuramente será feito o modúlo WEB.
Mais esse padrão Open Session tem como ser aplicado em aplicações Desktop?

Criado 8 de agosto de 2009
Ultima resposta 10 de ago. de 2009
Respostas 6
Participantes 2