Ajuda consulta hibernate

6 respostas
S

Pessoal estou querendo fazer uma consulta so que esta dando erro, tenho um bean que tem 2 objetos com abaixo:

private FornecedorBean fornecedorByDessulfIdFornAg2;
    private MaterialBean materialByDessulfIdMatAg2;
    private FornecedorBean fornecedorByDessulfIdFornAg1;
    private MaterialBean materialByDessulfIdMatAg1;

no meu bean tenho esse atributos, dai quero fazer um consulta que da um id de material verifique se ele existe em materialByDessulfIdMatAg2 e materialByDessulfIdMatAg1, segue abaixo meu codigo atual:

public boolean temMaterialAssociado(Long idMaterial) {
        boolean toReturn = false;
        Session session = getSession();
        try {
            Criteria crit = session.createCriteria(DessulfBean.class);
            Criteria subCrit = crit.createCriteria("materialByDessulfIdMatAg1");
            Criteria suCriteria = crit.createCriteria("materialByDessulfIdMatAg2");
            suCriteria.add(Restrictions.eq("matId", idMaterial));
            subCrit.add(Restrictions.eq("matId", idMaterial));
            if (!suCriteria.list().isEmpty() || !subCrit.list().isEmpty()) {
                toReturn = true;
            } else {
                toReturn = false;
            }
        } catch (Exception ex) {
            log.error("Falha ao verificar se o id [ " + idMaterial + " ] está associado a alguma dessulfuração. Erro: " + ex);
            toReturn = false;
        }
        return toReturn;
    }

Alguem pode me ajudar!?

6 Respostas

drsmachado

srmachado:
Pessoal estou querendo fazer uma consulta so que esta dando erro,
qual erro?
srmachado:
tenho um bean que tem 2 objetos com abaixo:

private FornecedorBean fornecedorByDessulfIdFornAg2;
    private MaterialBean materialByDessulfIdMatAg2;
    private FornecedorBean fornecedorByDessulfIdFornAg1;
    private MaterialBean materialByDessulfIdMatAg1;


2 objetos?

srmachado:

no meu bean tenho esse atributos, dai quero fazer um consulta que da um id de material verifique se ele existe em materialByDessulfIdMatAg2 e materialByDessulfIdMatAg1, segue abaixo meu codigo atual:

public boolean temMaterialAssociado(Long idMaterial) {
        boolean toReturn = false;
        Session session = getSession();
        try {
            Criteria crit = session.createCriteria(DessulfBean.class);
            Criteria subCrit = crit.createCriteria("materialByDessulfIdMatAg1");
            Criteria suCriteria = crit.createCriteria("materialByDessulfIdMatAg2");
            suCriteria.add(Restrictions.eq("matId", idMaterial));
            subCrit.add(Restrictions.eq("matId", idMaterial));
            if (!suCriteria.list().isEmpty() || !subCrit.list().isEmpty()) {
                toReturn = true;
            } else {
                toReturn = false;
            }
        } catch (Exception ex) {
            log.error("Falha ao verificar se o id [ " + idMaterial + " ] está associado a alguma dessulfuração. Erro: " + ex);
            toReturn = false;
        }
        return toReturn;
    }

Alguem pode me ajudar!?

S

tem um material e a consulta esta retornando uma lista vazia era para retorna com 1 elemento.

drsmachado

E como está a query gerada pelo Hibernate para executar a consulta?

S
select
    this_.DESSULF_ID as DESSULF1_170_2_,
    this_.DESSULF_ID_FORN_AG2 as DESSULF2_170_2_,
    this_.DESSULF_ID_MAT_AG2 as DESSULF3_170_2_,
    this_.DESSULF_ID_FORN_AG1 as DESSULF4_170_2_,
    this_.DESSULF_ID_MAT_AG1 as DESSULF5_170_2_,
    this_.DESSULF_ID_DESTINO_CT as DESSULF6_170_2_,
    this_.DESSULF_ID_CARRO_TORPEDO as DESSULF7_170_2_,
    this_.DESSULF_DESC as DESSULF8_170_2_,
    this_.DESSULF_ALA as DESSULF9_170_2_,
    this_.DESSULF_NUM_DESSULF as DESSULF10_170_2_,
    this_.DESSULF_E_REINJ as DESSULF11_170_2_,
    this_.DESSULF_DAT_HOR_INI as DESSULF12_170_2_,
    this_.DESSULF_DAT_HOR_TERM as DESSULF13_170_2_,
    this_.DESSULF_DAT_HOR_REC_CT as DESSULF14_170_2_,
    this_.DESSULF_DAT_HOR_LIBER_CT as DESSULF15_170_2_,
    this_.DESSULF_CORR_AF as DESSULF16_170_2_,
    this_.DESSULF_PESO_GUSA as DESSULF17_170_2_,
    this_.DESSULF_MODO_CALCULO as DESSULF18_170_2_,
    this_.DESSULF_TEMP_ANTES as DESSULF19_170_2_,
    this_.DESSULF_TEMP_APOS as DESSULF20_170_2_,
    this_.DESSULF_S_INICIAL as DESSULF21_170_2_,
    this_.DESSULF_S_INT as DESSULF22_170_2_,
    this_.DESSULF_S_VISADO as DESSULF23_170_2_,
    this_.DESSULF_S_FINAL as DESSULF24_170_2_,
    this_.DESSULF_ANGULO_VISADO as DESSULF25_170_2_,
    this_.DESSULF_ANGULO_REAL as DESSULF26_170_2_,
    this_.DESSULF_SILO  as DESSULF27_170_2_,
    this_.DESSULF_EFIC_PROG_AG1 as DESSULF28_170_2_,
    this_.DESSULF_EFIC_REAL_AG1 as DESSULF29_170_2_,
    this_.DESSULF_CONS_PROG_AG1 as DESSULF30_170_2_,
    this_.DESSULF_CONS_REAL_AG1 as DESSULF31_170_2_,
    this_.DESSULF_PESO_PROG_AG1 as DESSULF32_170_2_,
    this_.DESSULF_PESO_REAL_AG1 as DESSULF33_170_2_,
    this_.DESSULF_DELTA_PROG_AG1 as DESSULF34_170_2_,
    this_.DESSULF_DELTA_REAL_AG1 as DESSULF35_170_2_,
    this_.DESSULF_DELTA_REALIM_AG1 as DESSULF36_170_2_,
    this_.DESSULF_VAZAO_AG1 as DESSULF37_170_2_,
    this_.DESSULF_VAZAO_N2_AG1 as DESSULF38_170_2_,
    this_.DESSULF_PRESSAO_N2_AG1 as DESSULF39_170_2_,
    this_.DESSULF_TOTAL_N2_AG1 as DESSULF40_170_2_,
    this_.DESSULF_EFIC_PROG_AG2 as DESSULF41_170_2_,
    this_.DESSULF_EFIC_REAL_AG2 as DESSULF42_170_2_,
    this_.DESSULF_CONS_PROG_AG2 as DESSULF43_170_2_,
    this_.DESSULF_CONS_REAL_AG2 as DESSULF44_170_2_,
    this_.DESSULF_PESO_PROG_AG2 as DESSULF45_170_2_,
    this_.DESSULF_PESO_REAL_AG2 as DESSULF46_170_2_,
    this_.DESSULF_DELTA_PROG_AG2 as DESSULF47_170_2_,
    this_.DESSULF_DELTA_REAL_AG2 as DESSULF48_170_2_,
    this_.DESSULF_DELTA_REALIM_AG2 as DESSULF49_170_2_,
    this_.DESSULF_VAZAO_AG2 as DESSULF50_170_2_,
    this_.DESSULF_VAZAO_N2_AG2 as DESSULF51_170_2_,
    this_.DESSULF_PRESSAO_N2_AG2 as DESSULF52_170_2_,
    this_.DESSULF_TOTAL_N2_AG2 as DESSULF53_170_2_,
    this_.DESSULF_PROFUND_LANCA as DESSULF54_170_2_,
    this_.DESSULF_PESO_ESCORIA as DESSULF55_170_2_,
    this_.DESSULF_NIVEL_BANHO as DESSULF56_170_2_,
    this_.DESSULF_TURNO as DESSULF57_170_2_,
    this_.DESSULF_LETRA as DESSULF58_170_2_,
    this_.DESSULF_OPERADOR as DESSULF59_170_2_,
    this_.DESSULF_ALTO_FORNO as DESSULF60_170_2_,
    this_.DESSULF_DAT_HOR_INI_AG1 as DESSULF61_170_2_,
    this_.DESSULF_DAT_HOR_TERM_AG1 as DESSULF62_170_2_,
    this_.DESSULF_DAT_HOR_INI_AG2 as DESSULF63_170_2_,
    this_.DESSULF_DAT_HOR_TERM_AG2 as DESSULF64_170_2_,
    this_.DESSULF_CAMPANHA as DESSULF65_170_2_,
    this_.DESSULF_COEF_AG1  as DESSULF66_170_2_,
    this_.DESSULF_COEF_AG2 as DESSULF67_170_2_,
    this_.DESSULF_NUM_CICLO as DESSULF68_170_2_,
    this_.DESSULF_FASE_ATUAL as DESSULF69_170_2_,
    this_.DESSULF_TIPO as DESSULF70_170_2_,
    materialbe2_.MAT_ID as MAT1_167_0_,
    materialbe2_.MAT_ID_FORN as MAT2_167_0_,
    materialbe2_.MAT_COD as MAT3_167_0_,
    materialbe2_.MAT_DESC as MAT4_167_0_,
    materialbe2_.MAT_COEF as MAT5_167_0_,
    materialbe1_.MAT_ID as MAT1_167_1_,
    materialbe1_.MAT_ID_FORN as MAT2_167_1_,
    materialbe1_.MAT_COD as MAT3_167_1_,
    materialbe1_.MAT_DESC as MAT4_167_1_,
    materialbe1_.MAT_COEF as MAT5_167_1_ 
from
    DESSULFURACAO.DESSULF this_ 
inner join
    DESSULFURACAO.MATERIAL materialbe2_ 
        on this_.DESSULF_ID_MAT_AG2=materialbe2_.MAT_ID 
inner join
    DESSULFURACAO.MATERIAL materialbe1_ 
        on this_.DESSULF_ID_MAT_AG1=materialbe1_.MAT_ID 
where
    materialbe2_.MAT_ID=? 
    and materialbe1_.MAT_ID=?
drsmachado

E rodando essa query no banco de dados, substituindo os ? pelo id do material, funciona? Retorna algo?
Se não, então creio que o Criteria está errado.

S

Executei a consulta no banco de o que esta fazendo com que retorne nada na cunsulta é isso:

materialbe2_.MAT_ID=? 
        and materialbe1_.MAT_ID=?

mudei para

materialbe2_.MAT_ID=? 
        or materialbe1_.MAT_ID=?

e funcionou agora como faço isso usando criteria?

Criado 8 de fevereiro de 2012
Ultima resposta 8 de fev. de 2012
Respostas 6
Participantes 2