2010-02-08 13 views
18

Ich schreibe eine Abfrage für ein Domänenmodell, bei dem (aus welchen Gründen auch immer) eine Eins-zu-viele-Zuordnung mit lazy = "false" verknüpft wird. In meiner speziellen Abfrage würde ich diese Sammlung lieber faul holen, weil mir deren Inhalt egal ist. Wie kann ich Faulheit für meine spezielle Anfrage wieder aktivieren? Ist das überhaupt möglich?Hibernate: Aktivieren des verzögerten Abrufens in der Kriterien-API

Bisher sah ich auf Criteria.setFetchMode, aber FetchMode.LAZY ist nur eine veraltete Alias ​​für FetchMode.SELECT ...

Ändern der Zuordnung wahrscheinlich wäre ideal, aber ich möchte lieber nicht riskieren, die bestehenden Anfragen zu beeinflussen.

Edit: Wir verwenden Hibernate 3.3.2

Antwort

-6

Ich bin kein Experte selbst, sondern gerade durch das Hibernate Buch und Beratung mit einem Kollegen habe mir keinen Hinweis, dass dies möglich sein würde, eher das Gegenteil .

Ihre scheint eine ungewöhnliche Situation zu sein, nicht von Hibernate abgedeckt. Der typische Anwendungsfall ist das Gegenteil: Lazy-Abruf standardmäßig verwenden und selektives Abfragen für Abfragen aktivieren, bei denen dies gerechtfertigt ist.

+0

Ich habe auch nichts finden. Es scheint, dass eine bessere von den Standardeinstellungen des Winterschlafs nicht abweicht. Ich habe das Problem durch Projizieren bearbeitet. (Ich brauchte nicht die gesamten Entitäten, obwohl ich es lieber vermieden hätte, einen neuen DTO zu definieren). – meriton

+3

siehe meine Antwort, setFetchMode hat funktioniert. –

4

Falls jemand darüber stolpert (wie ich), siehe bitte this. Es scheint, dass dies ein Hibernate-Dokumentationsfehler war, und FetchMode.SELECT verursacht eine Lazy Load.

25

Die angenommene Antwort ist falsch. Hibernate ermöglicht es Ihnen, in Kriterien etwas abzugreifen, das standardmäßig in der Zuordnung eifrig ist. Einfach anrufen

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

Ich habe es versucht und es hat funktioniert. FetchMode.LAZY markiert im Quellcode als veraltet, und alle es tut, ist

Hibernate Code FetchMode.SELECT zeigen:

public static final FetchMode LAZY = SELECT; 
+1

Dies funktionierte für mich - ich habe Criteria.DISTINCT_ROOT_ENTITY mit setFirstResult & setMaxResults verwendet und zu wenige Ergebnisse erhalten. – blank

+2

@Che javara - habe das gerade versucht und funktioniert nicht für mich. Ich benutze Hibernate 3.6.10. Es wurde der Code für Verwendungen gesucht, und keiner hat Fälle von Hibernate gesehen, bei denen das Laden einer Sammlung/Assoziation übersprungen wurde. Haben Sie Vorschläge, wo Sie suchen können? – mikemil

+0

Hat bei Hibernate 4.0.5 nicht funktioniert – nxhoaf

Verwandte Themen