4 Stimmen

FetchMode in nativem Hibernate einstellen

Ich muss den Abrufmodus für meine Hibernate-Zuordnungen so einstellen, dass er in einigen Fällen eifrig und in anderen Fällen träge ist. Ich habe meine Standardeinstellung (über die hbm-Datei) als lazy="true" festgelegt. Wie kann ich diese Einstellung im Code außer Kraft setzen? MyClass hat ein Set vom Typ MyClass2 definiert, für das ich den FetchMode auf EAGER setzen möchte.

Zurzeit habe ich etwas wie:

Session s = HibernateUtil.getSessionFactory().openSession();
MyClass c = (MyClass)session.get(MyClass.class, myClassID);

5voto

Mat Mannion Punkte 3255

Sie könnten etwas in der Art versuchen: (Code aus dem Stegreif)

Criteria crit = session.createCriteria(MyClass.class);
crit.add(Restrictions.eq("id", myClassId));
crit.setFetchMode("myProperty", FetchMode.EAGER);
MyClass myThingy = (MyClass)crit.uniqueResult();

Ich glaube jedoch, dass FetchMode.JOIN oder FetchMode.SELECT anstelle von FetchMode.EAGER verwendet werden sollte.

3voto

Damo Punkte 11210

Wenn Sie Criteria nicht verwenden, gibt es auch die JOIN FETCH Schlüsselwort, das die durch den Join angegebene Assoziation eifrig lädt.

session.createQuery("select p from Parent p join fetch p.children c")

1voto

Henning Punkte 11101

Es gibt eine statische initialize(Object) Methode in der Hibernate Hauptklasse. Damit können Sie das Laden Ihrer Sammlung erzwingen:

MyClass c = (MyClass)session.get(MyClass.class, myClassID);
Hibernate.initialize(c.getMySetOfMyClass2());

Ein Standardwert für "Lazy Fetching" ist jedoch genau das: ein Standard Wert. Wahrscheinlich möchten Sie die Faulheit in der Zuordnung für Ihr spezielles Set außer Kraft setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X