Heim > Java > javaLernprogramm > Beispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand

Beispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand

黄舟
Freigeben: 2017-09-29 10:24:51
Original
1627 Leute haben es durchsucht

Um dieses Problem des verzögerten Ladens zu lösen, besteht der letzte Ansatz darin, eine von Spring für Hibernate bereitgestellte Unterstützungsklasse zu verwenden. Ihre Hauptbedeutung besteht darin, die Hibernate-Sitzung zu öffnen, wenn eine Seitenanforderung initiiert wird, und diese Sitzung so aufrechtzuerhalten, dass die Hibernate-Sitzung erhalten bleibt Der Lebenszyklus wird länger, bis die Anfrage endet, was durch einen Filter implementiert wird. Wenn wir nun also die Lazy-Loading-Funktion von Hibernate nutzen und außerdem den Lebenszyklus der Sitzung verlängern und die Daten auf der Seite anzeigen möchten (über die Aktionsebene), müssen wir die folgende Konfiguration zum Web hinzufügen. xml-Datei:


    <!-- 配置Spring的用于解决懒加载问题的过滤器 -->  
     <filter>  
        <filter-name>OpenSessionInViewFilter</filter-name>  
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
     </filter>  
     <filter-mapping>  
        <filter-name>OpenSessionInViewFilter</filter-name>  
        <url-pattern>*.action</url-pattern>  
     </filter-mapping>
Nach dem Login kopieren

Hinweis: 1) OpenSessionInViewFilter ist der Filtername, *.action bedeutet das Abfangen aller Aktionen, oder /*

2) Nicht-Webseitenanforderungen (z. B. geplante Aufgaben) können auf folgende Weise verarbeitet werden (die Methode Hibernate.initialize(Object Proxy) erzwingt das Laden, was einer dynamischen Änderung von lazy=fals entspricht)


/**
 * @Author masl - 2017/9/28 14:22
 * @param setRepaymentId
 * @param initSubs :是否初始化关联表数据
 * @return
 */
@Override
public SetRepayment findSetRepaymentById(Integer setRepaymentId, boolean initSubs) {
    SetRepayment setRepayment = null;
    if (setRepaymentId != null) {
        setRepayment = setRepaymentDao.get(setRepaymentId);
        if (setRepayment != null && initSubs) {
            Hibernate.initialize(setRepayment.getSetIncomes());
        }
        return setRepayment;
    }
    return null;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispiele für den Umgang mit fehlgeschlagenem verzögertem Laden von fetch=FetchType.LAZY im Ruhezustand. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage