Caros amigos,
Meu sistema tem um método que retorna um objeto único, através do Hibernate, como é mostrado abaixo:
public T getUniqueResult(String nomeDoCampo, Object valor) {
Session session = HibernateUtil.getSession();
Criteria criteria = session.createCriteria(classe);
Criterion retornoValor = Restrictions.gt(nomeDoCampo, valor);
criteria.setMaxResults(1);
return (T) criteria.uniqueResult();
}
Uso este método em diversos módulos do sistema e ele funciona perfeitamente. Porém, em uma das páginas (desenvolvidas em JSF) do sistema eu preciso selecionar dois objetos de mesmo tipo (mais especificamente, do tipo Funcionario) a partir de comboboxes: um que será o funcionário requisitante e o outro que será o funcionário requisitado.
Quando eu seleciono qualquer funcionário do combobox que não seja o primeiro da lista (supondo que este primeiro da lista seja “Beltrano da Silva”), acontece o seguinte: antes de entrar neste método, o sistema sabe que deve pegar o nome do funcionário escolhido (portanto, String nomeDoCampo = “nome” e Object valor = “Fulano de Tal”) e, até retornoValor, ele pega corretamente (se, abaixo de Criterion retornoValor = Restrictions.gt(nomeDoCampo, valor); eu fizer System.out.println("Retorno valor é: " + retornoValor.toString()), aparece:
Ou seja, está sendo obtido do banco a coluna certa (“nome”) e o campo certo (“Fulano de Tal”). Então até agora tudo bem. Porém, na saída deste método (assim que ele sai do método), o funcionário que ele retorna é “Beltrano da Silva”, que é o primeiro da lista.
Ou seja, alguma coisa acontece durante:
criteria.setMaxResults(1);
return (T) criteria.uniqueResult();
Pois o valor que está sendo retornado, que deveria ser “Fulano de Tal”, está sendo “Beltrano da Silva”, que é o primeiro da lista.
Alguma sugestão para resolver este problema? Grato pela atenção.