2011-01-17 10 views
0

Ich habe eine Tabelle namens Rollen. Jede Rolle kann zu einer Organisation gehören. Rollen, die keiner Organisation angehören, haben den Wert null. Ich möchte alle Rollen für eine bestimmte Organisation finden oder wo die Organisation innerhalb der Tabelle null ist.Hibernate-Kriterien Query Join mit Null-Wert

Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class) 
.add(Restrictions.or(
    Restrictions.eq("organization",organization.getId()), 
     Restrictions.isNull("organization"))); 

Die Mapping-Datei hat:

<many-to-one class="com.myname.models.Organization" name="organization"> 
<column name="organization_id" precision="22" scale="0" /> 
</many-to-one> 

Wenn die Abfrage ausgeführt wird, erhalte ich:

IllegalArgumentException occurred calling getter com.myname.models.Organization.id 

Ich habe festgestellt, dass, wenn ich die Kriterien ändern, um nur für NULL-Werte auf Organisation abfragen Alles funktioniert, aber sobald ich nach einem Wert abfrage, bekomme ich den Fehler.

Wie ändere ich die Abfrage oder die Zuordnungsdatei, um meine Ziele zu erreichen?

+1

hat 'com.myname.models.Organiation.getId()' existieren, und werfen Sie eine Ausnahme in ihm? –

Antwort

1

Dies scheint darauf hinzudeuten, dass Sie "Organisation" irgendwo verwenden, wo dies vermutlich "Organisation" sein sollte.

+0

Nein, musste den Code erneut eingeben, so war der Fehler in der Übersetzung zwischen Computern. – nwwatson

2

Nicht sicher, ob Sie immer noch nach der Antwort suchen, aber da ich diesen Thread während meiner Suche nach einer Lösung des gleichen Problems gefunden habe, könnte ich es für zukünftige Referenz hilfreich sein.

Sie müssen Ihre Kriterien wie folgt konstruieren:

final Criterion lhs = Restrictions.eq("organization",organization.getId()); 
final Criterion rhs = Restrictions.isNull("organization"); 
Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class).add(Restrictions.or(lhs, rhs));