[RESOLVIDO]Dúvida de criteria

7 respostas
calel

Estou aprendendo a utilizar criteria do Hibernate, e estou com uma dúvida no seguinte caso.
Como buscar todos os funcionarios de um certo departamento.
Resolvi esse problema adcionando ao Departamento uma lista de funcionarios com a anotação @OneToMany(mappedBy=“departamento”)
Dessa forma consigo a lista de funcionarios de um certo departamento.

Existe outro modo de conseguir essa lista de funcionarios?

7 Respostas

zoren

Isso depende do relacionamento entre os envolvidos

romarcio

Por Criteria, poderia fazer assim:

Vamos dizer que em Funcionario vc mapeou e criou um tipo Departamento.

Então passa como parametro o departamento que deseja buscar os fucionarios.

calel

Estou fazendo a pesquisa pela descricao do departamento. Em HQL eu fiz o seguinte:

Query q = session.createQuery("from Funcionario f " + " where departamento.descricao like :dep"); q.setParameter("dep", "%" + departamento + "%"); return q.list();
Mas em criteria ele não aceita departamento.descricao.

public List<Funcionario> getFuncionarios(String departamento){ Criteria c = session.createCriteria(Funcionario.class); c.add(Restrictions.ilike("departamento.descricao", "%" + departamento + "%")); return c.list(); }
É lançada a exceção:

Funcionario:

@Entity public class Funcionario { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String nome; private String email; @ManyToOne(fetch=FetchType.LAZY) private Departamento departamento; }
Departamento:

@Entity public class Departamento { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String descricao; }

romarcio

No caso em criteria, vc deveria passar o parametro tipo Departamento departamento e não tipo String descricao.

public List&lt;Funcionario&gt; getFuncionarios(Departamento departamento){
		Criteria c = session.createCriteria(Funcionario.class);
		c.add(Restrictions.eq("departamento", departamento));
		return c.list();
	}

Pq vc tem na sua tabela Departamento algo assim:

ID DESCRICAO
1   almoxarifado
2   finanças
3   fiscal

No caso, se vc passar por parametro o objeto Departamento referente ao ID 2, não precisa comparar por DESCRICAO.

calel

Entendi isso no seu primeiro exemplo, mas pra exemplificar meu caso, tenho uma tela com uma lista de funcionarios e apresento o nome de seus respectivos departamentos.
O usuario digita o nome do departamento que deseja filtrar por, e na tela é apresentado apenas os funcionarios dos departamentos que estão de acordo com o filtro selecionado.
usando seu exemplo, se a pessoa digitasse “fi”, os funcionarios dos departamentos finanças e fiscal apareceriam na tela, omitindo apenas os funcionarios do almoxarifado.

romarcio

Dessa forma que vc quer a consulta, acho que não tem como mesmo.

A não ser que a pesquisa fosse feita em Departameto, e depois passar por parametro esses departamentos para a consulta de funcionário.
Teria que retornar uma lista de departamentos, e fazer a consulta em funcionario através dessa lista, mas dai não sei se vale o esforço, já que vc conseguiu fazer por HQL.

calel

Valeu Romarcio!
Estava mesmo querendo saber minha opções.
Valeu mesmo a ajuda =)

Criado 1 de setembro de 2010
Ultima resposta 1 de set. de 2010
Respostas 7
Participantes 3