Frage

Ich weiß, dass dies eine subjektive Frage, aber warum scheint Hibernate für kurzlebige Sitzungen gestaltet werden? Im Allgemeinen in meine apps erstelle ich DAOs abstrahieren meine Datenschicht, aber da kann ich nicht vorhersagen, wie die Entitätsobjekten sind einige seiner Sammlungen werden werden verwendet faul geladen, oder sollte ich sagen laden fehlschlagen, sobald die Sitzung geschlossen.

Warum haben sie es nicht so auszugestalten, dass sie die Sitzung automatisch wieder öffnen würde, oder Sitzungen haben immer offen bleiben?

War es hilfreich?

Lösung

Becuase, wenn Sie aus Ihrer Transaktion bewegen Grenzen Sie die Datenbank nicht wieder treffen können, ohne eine neue Transaktion zu beginnen. Nachdem lange Transaktionen ‚für alle Fälle‘ ist eine schlechte Sache (tm) läuft.

Ich denke, Sie aus Ihrer Sicht zu faul Last Objekt wollen - werfen Sie einen Blick hier einige Optionen. Ich ziehe es genau zu definieren, wie viel des Objektes Karte durch meine Session Fassade Methoden zurückgegeben wird. Ich finde, das macht es einfacher, Unit-Test und Performance meines Business-Tier testen.

Andere Tipps

Ich arbeitete auf einer Desktop-Anwendung, die EJB und Hibernate verwendet. Wir hatten lazy=false überall zu setzen, weil, wenn die Objekte serialisiert erhalten, sie verlieren ihre Fähigkeit aus dem Backend geholt zu werden. Das ist nur, wie es geht, leider.

Wenn Sie mit der Leistung betrifft, Sie Caching im Backend verwenden könnte, damit Ihr nicht faul Abholungen sind nicht so schmerzhaft.

Sie suchen nach dem OpenSessionInView Muster, das im Wesentlichen ein konzeptionelles Filter (und manchmal als Servlet-Filter implementiert), der erkennt, wenn eine Sitzung transparent wieder geöffnet werden muss. Mehrere Frameworks dies umzusetzen, damit sie es automatisch behandelt.

Ich schreibe eine Desktop-Anwendung so unter Verwendung eines Filters ist nicht anwendbar.

Verbindungen sind eine knappe Ressource, die recycelt werden müssen, sobald Sie sie nicht mehr verwenden. Wenn Sie auch Connection Pooling verwenden, ein anderes bekommen, wenn Sie benötigen sollte schnell sein. Dies ist die Architektur, die Sie verwenden müssen, um auf Webseiten Maßstab zu machen -. Obwohl Sie eine Desktop-Anwendung sind, ihre Anwendungsfälle wahrscheinlich auf skalierbare Websites konzentrieren

Wenn Sie auf MS ADO.NET betrachten, werden Sie einen ähnlichen Fokus siehe Verbindungen offen für eine kurze Zeit zu halten -. Sie ein ganzes offlinees Modell für Daten getrennt und dann die Anwendung auf eine Datenbank zu aktualisieren, wenn Sie bereit sind

Ruhezustand wird als so konzipiert, Objekte zu relationalen Datenbanktabellen abzubilden. Dies wird erreicht, dass die Arbeit sehr gut. Aber kann es nicht allen recht machen die ganze Zeit. Ich denke, es gibt einige Komplexität ist zu lernen, wie die Initialisierung funktioniert, aber sobald Sie den Dreh raus zu bekommen macht es Sinn. Ich weiß nicht, ob es notwendig war „entworfen“, um speziell auf Ärger Sie, es ist nur so, wie es passiert ist.

Wenn es würde auf magische Sitzungen in nicht-Webapps wieder öffnen Ich denke, die Komplexität des Rahmens Lernen weit würden die Vorteile überwiegen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top