Vou tentar explicar oq misteriosamente esta acontecendo, encontraram um bug no ambiente de testes que simplesmente nao reproduzia no ambiente de desenvolvimento, uma determinada consulta no ambiente de testes nao retornava nada e no backup desse banco
na minha maquina funcionava, subi a aplicacao no banco do ambiente de testes e consegui reproduzir o bug, constatamos que so podia estar relacionado a alguma particularidade do servidor de banco de dados (ja que funcionava normalmente e coicidentemente ele foi formatado a pouco tempo) ou o hibernate, extrai a query que o hibernate gera e usamos somente o PreparedStatement e mesmo assim o bug continua. Segue a consulta:
Dessa forma nao retorna nada:
Obs.: Se executarmos isso direto no gerenciador do sql server retorna o valor 1
PreparedStatement psValorAtributo =
conn.prepareStatement("select count(*) as col_0_0_ from TABELA_AUDITOR auditorto0_ where auditorto0_.id_auditor=? " +
"and(auditorto0_.id_auditor in(select auditorto1_.id_auditor from TABELA_AUDITOR auditorto1_, TABELA_QUALIFICACAO qualificac2_ " +
"where auditorto1_.id_auditor=qualificac2_.id_auditor and ((((qualificac2_.id_sistema_gestao=? ))))))and(1 like 1 escape '\\' )");
psValorAtributo.setLong(1, new Long(171));
psValorAtributo.setLong(2, new Long(83));
ResultSet rs = psValorAtributo.executeQuery();
rs.next();
System.out.println("############################## PREPARED: " + rs.getInt(1));
Dessa forma retorna o valor que de fato esta correto: 1
PreparedStatement psValorAtributo =
conn.prepareStatement("select count(*) as col_0_0_ from TABELA_AUDITOR auditorto0_ where auditorto0_.id_auditor=171 " +
"and(auditorto0_.id_auditor in(select auditorto1_.id_auditor from TABELA_AUDITOR auditorto1_, TABELA_QUALIFICACAO qualificac2_ " +
“where auditorto1_.id_auditor=qualificac2_.id_auditor and ((((qualificac2_.id_sistema_gestao=? ))))))and(1 like 1 escape ‘\’ )”);
//psValorAtributo.setLong(1, new Long(171)); RETIRO ESSE PARAMETRO E COLOCO DIRETAMENTE NA QUERY
psValorAtributo.setLong(1, new Long(83));
ResultSet rs = psValorAtributo.executeQuery();
rs.next();
System.out.println("############################## PREPARED: " + rs.getInt(1));
Assim retorna o valor de fato real
O problema é somente com o Sql Server e em situacoes muito especificas. Alguem ja se deparou com isso, ou algo parecido?