Domanda

Sto cercando di creare una query con criteri di ibernazione per il seguente scenario:

  • Due entità: indicatore e report (ognuno con le proprie tabelle, classi ecc.)
  • un indicatore può essere utilizzato da zero a molti rapporti
  • un rapporto utilizza da zero a molti indicatori
  • pertanto, ho una tabella di intersezione per memorizzare la relazione
  • la relazione è definita in entrambe le classi e nei relativi mapping di ibernazione
  • nell'interfaccia utente, l'utente può selezionare uno o più report (tra le altre cose) e vorrei interrogare il DB per gli indicatori utilizzati in questi report

Ho provato quanto segue:

criteria.add(Restrictions.in("Reports", selectedReports));

ma tutto quello che ottengo è una strana istruzione SQL con

where this_.Indicator_ID in (?)

e quindi un'eccezione JDBC (parametro mancante)

Qualche idea? Grazie.

Nota: ho esaminato Interrogando ManyToManyrelationship con Hibernate Criteria , ma la soluzione accettata è quella di creare una stringa sql personalizzata ...

È stato utile?

Soluzione

  Criteria c = session.createCriteria(Indicator.class);
    c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
    .add(Restrictions.eq("reportName", name);
    c.list();

È necessario creare un sottocritere per l'entità detenuta in una raccolta su un'altra entità.

String[] selectedReportsId = {"1", "2", "3"};
 c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
    .add(Restrictions.in("id", selectedReportsId);

Quindi dai un'occhiata alla trasformazione dei risultati da qui: https: // docs. jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

Anche questo potrebbe far luce su ciò che puoi fare con i criteri: http://www.hibernate.org/hib_docs/ v3 / api / org / hibernate / criterio / Restrictions.html

Altri suggerimenti

Se è necessario, ecco alcuni suggerimenti con cui Google è tornato dopo aver cercato " hibernate hql many-to-many " ;:

http://patf.net /blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

E dai forum di Hibernate:

http://forum.hibernate.org/viewtopic.php?p = 2340747 & amp; sid = d4c8d2fcc16aed0201f73eb74619692a

E dai forum di primavera:

http://forum.springframework.org/showthread.php?t=36870

Spero che questi aiuti.

Per ora, è così che l'ho fatto funzionare (grazie a zmf).

Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
    dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);

Questo è quasi esattamente ciò che zmf ha suggerito, tutto ciò che ho aggiunto è stata la disgiunzione per costruire i criteri dalla Collezione che viene passata in giro.

Tutto ciò che resta da fare è provare a utilizzare la raccolta direttamente ...

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