Pergunta

Eu gostaria de usar API Critérios de Hibernate para precisamente o que todo mundo diz que é provavelmente o seu caso de uso mais provável, aplicando critérios de pesquisa complexos. O problema é que a tabela que eu quero consulta contra não é composto inteiramente de valores primitivos, mas parcialmente de outros objetos, e eu preciso consulta contra id aqueles do objeto do.

Eu encontrei este artigo a partir de 2 anos atrás, que sugere que não é possível. Aqui está como eu tentei sem sucesso, há outro aspecto do Hibernate onde eu sei de onde esse tipo de notação de ponto é suportado dentro de strings literais para indicar objeto de nidificação.

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

EDIT:

Aqui está o meu código corretamente consignado para realizar o que eu estava tentando acima, usando a sugestão da primeira resposta abaixo; Note que eu estou mesmo usando uma chamada createCriteria adicional à ordem em um atributo em outro objeto / tabela associada:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
Foi útil?

Solução

Não inteiramente certo que eu siga o seu exemplo, mas é certamente possível especificar condições de filtro em uma entidade associada, simplesmente aninhando Critérios objetos para formar uma árvore. Por exemplo, se eu tiver uma entidade chamada Ordem , com uma relação muitos-para-um relacionamento com um usuário entidade, posso encontrar todos os pedidos para um usuário chamado Fred com uma consulta assim:

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

Se você está falando de uma entidade que tem uma relação a si mesma, que deve funcionar bem. Você também pode substituir "nome" com o "id" se você precisa de filtro sobre o ID de um objeto associado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top