Olá pessoal,
Tenho uma tela de pesquisa de empresa onde o usuário pode especificar
diversos critérios para pesquisar...
A empresa possui um relacionamento NxN com Área de atuação, caso o
usuário informe a área de atuação como critério para pesquisa, devo
trazer todas as empresa onde o id da empresa esteja nesta tabela de
relacionamento e o nome da área de atuação seja o informado pelo
usuário...
Estou com problemas para criar esse IN com criteria, pois fiz da
seguinte forma (visão geral):
Criteria criteriaEmpresa = createCriteria(Empresa.class);
if(porAreaAtuacao){
Criteria criteriaEmpresaAreaAtuacao =
createCriteria(EmpresaAreaAtuacao.class);
criteriaEmpresaAreaAtuacao.createAlias("areaAtuacao",
"areaAtuacao");
criteriaEmpresaAreaAtuacao.createAlias("empresa", "empresa");
criteriaEmpresaAreaAtuacao.setProjections(Projections.property("
empresa.id"));
criteriaEmpresaAreaAtuacao.add(Restrictions.eq("nome",
areaAtuacaoInformadaPeloUsu));
criteriaEmpresa.add(Restrictions.in("id",
criteriaEmpresaAreaAtuacao.list()));
}
O problema é que se criteriaEmpresaAreaAtuacao.list() retornar uma
lista vazia ocorre errro, pois na hora que o hibernate monta a quer
fica algo como:
empresa.id IN ();
Não posso simplesmente fazer uma verificação se
criteriaEmpresaAreaAtuacao.list() está retornando uma lista vazia
antes de utilizar no IN porque neste caso não deveria trazer nenhuma
empresa...
Qual a forma correta de fazer este in?