Hibernate + Criteria

Olá pessoal,

estou com um probleminha, na parte de Restrictions da minha query
eu preciso verificar campos de outros tabelas do meu relacionamento.

exemplo:

Criteria criteria = getCurrentSession().createCriteria(ParametroTransferenciaFaseFadLocal.class);
			criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);				      	      
			criteria.add(Restrictions.eq("funcaoTransferenciaFaseFadLocal.funcaoTransferenciaFadLocal.skin",codRevst));
			criteria.add(Restrictions.in("funcaoTransferenciaFaseFadLocal.funcaoTransferenciaFadLocal.indAplbFcaoTrfer",aplicabilidades));
			criteria.addOrder(Order.asc("numeroFaseCrespTrferFadLocal"));

mais não esta funcionando acessando os atributos pelo “.”

todas as classes dessa query estao com fetch EAGER.

ParametroTransferenciaFaseFadLocal(tem o atributo manytoone funcaoTransferenciaFaseFadLocal)
FuncaoTransferenciaFaseFadLocal(tem o atributo manytoone funcaoTransferenciaFadLocal)

e preciso q a query verifique os campos da classe FuncaoTransferenciaFadLocal que a a mãe de todas.

Classe : FuncaoTransferenciaFaseFadLocal

@JoinColumn(name = "COD_FCAO_TRFER_FAD_LOCAL")
	@ManyToOne(fetch=FetchType.EAGER)
	private FuncaoTransferenciaFadLocal funcaoTransferenciaFadLocal;

Classe ParametroTransferenciaFaseFadLocal

@JoinColumn(name = "COD_FCAO_TRFER_FASE_FAD_LOCAL")
	@ManyToOne(fetch=FetchType.EAGER)
	private FuncaoTransferenciaFaseFadLocal funcaoTransferenciaFaseFadLocal;

Fico no aguardo e desde já agradeço.


Criteria c = getSession().createCriteria(Assistencia.class);
		c.createAlias("postos", "postos");
		c.createAlias("postos.posto", "posto");
		c.add(Restrictions.eq("posto.id", postoId));

paraibe vlws pela dica, ajudou bastante!

  • tipo olha esse caso(ficticio só para exemplificar meu problema real), se tenho o seguinte relacionamento

Cliente é a classe principal e as classes ContaPagar e CartaoCredito tem um relacionamento manytoone com o cliente

tipo como faço em criteria para pegar todas as contas que tenhao cliente com cartao de credito igual a visa?

Prometo que essa é a ultima pergunta!To com um projeto com criteria para entregar ontem(rs)! e só
falta resolver esse problema!

Ficarei no aguardo e desde já agradeço

[RESOLVIDO]

solução:

public List<ContaPagar> buscaContasComBandeiraVisa() {

		List<ContaPagar> contas = new ArrayList<ContaPagar>();

		Criteria c = getSession().createCriteria(ContaPagar.class);
		c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
		c.createAlias("cliente", "c");
		c.createAlias("c.cartoes", "d");		
		c.add(Restrictions.eq("d.bandeira", "visa"));
		c.addOrder(Order.asc("c.nome"));

		List lista = c.list();
		for (Object object : lista) {
			contas.add((ContaPagar) object);
		}

		return contas;

	}

quando isso acontecer criar relacionamento onetomany na classe principal!!

Obrigado ai paribe pela dica!

Abraços e até a proxima !=D

Criteria c = getSession().createCriteria(Cliente.class);

	c.createAlias("pagar", "pagar");
           c.createAlias("cartao", "cartao");
	
	c.add(Restrictions.eq("cartao.id", "VISA"));

	return c.list();
  • ai paribe eu teria q ter o relacionamento das duas classes onetomay na classe cliente ne?

sim

Vlws paribe!!!