Hibernate + Criteria

1 resposta
D

Boa noite pessoal,

Estou com a seguinte situacao, tenho uma tabela TabAvaliacaoDesenpenho, dentro dela tem o atributo codUsuario associado que me retorna um objeto TabUsuarioAssociado.
Dentro desta tabela tenho os atributos tabUsuario que me retorna um objeto da tabela TabUsuario e codCentroResultado que me retorna um objeto TabCentroDeResultado.

Criei uma criteria chamada criteriaTAD para o TabAvaliacaoDesempenho.

Criteria criteriaTAD = getSession().createCriteria(
				TabAvaliacaoDesempenho.class);

adicionei mais criterios

criteriaTAD.createCriteria("codUsuarioAssociado").createCriteria("tabUsuario").add(Restrictions.like("nomUsuario", nomUsuario));

criteriaTAD.createCriteria("codUsuarioAssociado").createCriteria("codCentroResultado").add(Restrictions.eq("codCentroResultadoFolha",codCentroResultadoFolha));

Ele esta gerando uma excessao pois estou referenciando o codUsuarioAssociado duas vezes na criteria.
Vcs poderiam me ajudar a resolver isso?

abraço.

1 Resposta

J

Olá.

Neste caso sugiro o uso de alias para as associações. Faça algo assim:

criteriaTAD.createAlias("codUsuarioAssociado", "usuarioAssociado");

Assim, sempre que quiser fazer referencia à um atributo dessa classe use o alias. Por exemplo:

criteriaTAD.createAlias("usuarioAssociado.tabUsuario", "usuario");
  criteriaTAD.createAlias("usuarioAssociado.codCentroResultado", "centroResultado");

  criteriaTAD.add(Restrictions.like("usuario", nomUsuario));
  criteriaTAD.add(Restrictions.eq("centroResultado", codCentroResultadoFolha));

Pode usar com createCriteria tambem, passando ao construtor um 2º argumento, que é o alias para a associação.
Não testei, mas pelo que me lembro esta é uma solução.

Criado 4 de novembro de 2008
Ultima resposta 7 de nov. de 2008
Respostas 1
Participantes 2