Duvida criteria com join

7 respostas
W

Gostaria de ajuda para fazer o select abaixo com criteria. Conheço o básico de hibernate e estou apanhando pra fazer. E tem que ser com criteria. Obrigado.

select
tab1.codTab1,
tab1.nomeTab1,
tab2.codTab2,
tab2.nomeTab2
from
Tabela1 tab1,
Tabela2 tab2
where
tab1.id=tab2.id and
tab1.id2=tab2.id2;

7 Respostas

CharlesAlves

coloca aqui a forma como tu criou as classes pra esse tipo de mapeamento.

romarcio

Se na classe da Tabela 1 você tem um atributo do tipo classse Tabela 2, basta fazer assim um consulta simples como esta:

getSession().createCriteria(ClasseTabela1.class).list();

Como a comparação é apenas por ID, não precisa fazer mais nada além disto.

W
coloca aqui a forma como tu criou as classes pra esse tipo de mapeamento.
public class MapaORM extends AbstractORM {
	private ORMid id;
	private String nome;
	private JGeometryType poligono;
	private Date dataAtualizacao;
	private Set regras;
	private Integer status;
	
	//getters e setters
}	

//Tabela de relacionamento entre MapaORM e ContratoORM
public class RegraORM extends AbstractORM {
	private RegraORMid id;
	private MapaORM mapaORM;
	private ContratoORM contratoORM;
	
	//getters e setters
}

public class ContratoORM extends AbstractORM {
	private ContratoORMid id;
	private Set grupos;  <------------- tem que carregar esses grupos
	private MapaORM mapa;
	private Set regrasCerca;
	//outros atributos
	
	//getters e setters
}
Se na classe da Tabela 1 você tem um atributo do tipo classse Tabela 2, basta fazer assim um consulta simples como esta:
A tabela2 não é atributo na tabela1. Na verdade, na tabela2 (ContratoORM) tem um set de outra classe que precisa ser carregada nessa busca.
CharlesAlves

Tenta assim

Criteria criteria = session.createCriteria(tab1.class);
   /*no primeiro parametro vem o nome do atributo
    *da classe que representa a tab2 na classe
   */
   criteria.createAlias("grupos", "tab2");

   criteria.add(Restrictions.eq("tab2.id", tab1.getId()));
   criteria.add(Restrictions.eq("tab2.id2", tab1.getId2()));

   criteria.list();

fiz isso meio de cabeça pode ser que tenha algum erro de digitação mas é por ai, vê se consegue e manda o feedback

W

CharlesAlves, obrigado pela atenção.
Na verdade, já deu uma mudada na pesquisa. As classes envolvidas são as mesmas, mas a consulta será na tabela de relacionamento RegraORM. O resultado trará uma lista.
Devo pegar essa lista e verificar se os valores existem na tabela ContratoORM, algo do tipo:

Acho que a sintaxe está errada, mas é só pra exemplificar. Utilizando criteria.
Tenho que fazer isso urgente, meu pescoço está em jogo. :´-(

Obrigado.

romarcio

Ta dificil de entender porque o seu exemplo busca id1, id2… Se colocasse o cenário real ficaria mais fácil.
Mas, tenta algo assim:

getSession()
                    .createCriteria(RegraORM .class)
                        .add(Restrictions.eq("id1", 10))
                        .add(Restrictions.eq("id2", 5))
                    .createCriteria("contratoORM")
                        .add(Restrictions.eq("id1", 10))
                        .add(Restrictions.eq("id2", 5))
                    .list();
W

romarcio, o cenário é o seguinte:

  • Tenho que fazer um modal que apresente certos dados que vem dessas tabelas.(mostradas acima)
  • Serão selecionados um ou mais checkbox de uma tela e clicar num botão EXCLUIR onde serão passados para a busca os id1 e id2 que correspondem ao objeto MapaORM.
  • Essa busca será feita na tabela de relacionamento RegraORM que retornará uma lista de valores cadastrados.
  • Verificar se os itens dessa lista existem na tabela ContratoORM. Os valores desse objeto serão apresentados no modal.

Espero que tenha ficado menos confuso e agradeço a atenção.

Criado 6 de outubro de 2011
Ultima resposta 6 de out. de 2011
Respostas 7
Participantes 3