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?
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.
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 =)