Dúvida sobre Criteria do Hibernate (parâmetros na criteria)

Pessoal, a dúvida é simples. Comecei a estudar a parte de Criteria do Hibernate por sua documentação aqui: http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html

Nos exemplos que eu vi na página, como em:

List cats = sess.createCriteria(Cat.class)
.add( Expression.like(“name”, “Fritz%”) )
.add( Expression.or(
Expression.eq( “age”, new Integer(0) ),
Expression.isNull(“age”)
) )
.list();

os parâmetros passados na criteria (name, age) são tipos definidos de Java, eu posso passar como parâmetros tipos definidos por mim?

“name” e “age” são exemplos de campos da tabela q esta sendo feita a pesquisa, “nome” e “idade” nesse caso…tendeu?

vc passa na criteria o campo, e o valor a seer comparado…

Certo, blz isso eu sei, mas se o valor for um objeto que eu defini, como a classe “MeuObjeto”, por exemplo? Nesses casos, na tabela do bd, esse campo vai ser um int8 (ou outro tipo numerico apropriado) pois ele vai ser uma chave estrangeira (referencia outra tabela).
Eu poderia fazer assim, por exemplo?

.add( Expression.eq(“professor”, new Professor(3) ) )

(onde “3” é seu id, e “professor” é um campo da tabela Turma do tipo int8 que faz referencia à tabela de Professor)

ou teria que fazer assim?

.add( Expression.eq(“professor”, new Long(3) ) )

Entenderam, o que funciona?

nesse exemplo do professor, acredito q vc teria q fazer algo assim:

List turmas = sess.createCriteria(Turma.class)
.add( Expression.eq("professor", new Integer(10)) )
.list(); 

soh q tudo depende do seu mapeamento… se 1 Professor, atende N Turmas, vai retornar a lista de turmas desse professor…lembrando q “professor” eh a PK da tabela Professor q por causa do relacionamento, esta como FK na tabela Turma…certo?

espero ter ajudado…

Quando você monta uma relação em hibernate, por exemplo Filho / Mae, e que mãe é um tipo definido por você, acontece o seguinte:

No BD, na tabela filho não vai existir um Objeto Mãe, vai existir somente o id da mãe, se for Long tem um Long, se for um int tem um int e pronto.

daí, se você vai fazer uma consulta, de todos os filhos de uma mãe, por exemplo, você pode passar pra criteria, um objeto m do tipo Mãe que tenha simplesmente o id preenchido. e dizer Expression.eq(“mae”, m).

O objeto “m” pode estar todo populado, mas a consulta será feita somente na chave, que é o id.

[]'s

Obrigado, vcs dois responderam a minha pergunta, valeu!!!