Domanda

Mi piacerebbe usare API Criteri di Hibernate per esattamente ciò che dicono tutti è probabilmente il suo caso d'uso molto probabilmente, l'applicazione di criteri di ricerca complessi. Il problema è, la tabella che voglio interrogare contro non è composto interamente da valori primitivi, ma in parte da altri oggetti, e ho bisogno di interrogare contro id quelli dell'oggetto.

Ho trovato questo articolo da 2 anni fa, che suggerisce che non è possibile. Ecco come ho provato inutilmente, ci sono altri aspetti di Hibernate dove so di dove questo tipo di notazione punto è supportata all'interno di stringhe letterali per indicare oggetto di nidificazione.

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

EDIT:

Ecco la mia correttamente scomposto il codice per realizzare quello che stavo cercando sopra, usando il suggerimento dalla prima risposta qui sotto; notare che io sono anche usando una chiamata createCriteria aggiuntivo per ordinare su un attributo in un altro oggetto / tabella associata:

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

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
È stato utile?

Soluzione

Non del tutto sicuro di seguire il tuo esempio, ma è certamente possibile specificare condizioni di filtro su un'entità associata, semplicemente nidificazione Criteri gli oggetti in modo da formare un albero. Per esempio, se ho un'entità chiamata Ordine con una relazione molti-a-uno ad un utente entità, posso trovare tutti gli ordini per un utente di nome Fred con una query in questo modo:

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

Se si sta parlando di un ente che ha un rapporto a se stesso, che dovrebbe funzionare pure. È inoltre possibile sostituire "nome" con "id" se avete bisogno di filtrare l'ID di un oggetto associato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top