Korrigieren Sie mich, wenn etwas nicht stimmt.DAO, Spring und Hibernate
Wenn wir Spring DAO für ORM-Vorlagen verwenden, haben wir bei Verwendung des @Transactional-Attributs keine Kontrolle über die Transaktion und/oder Sitzung, wenn die Methode extern aufgerufen wird, nicht innerhalb der Methode.
Lazy loading spart Ressourcen - weniger Abfragen an die db, weniger Speicher, um alle im App-Speicher abgerufenen Sammlungen zu behalten.
Also, wenn Lazy = false, dann wird alles abgerufen, alle zugeordneten Sammlungen, das ist nicht effektiv, wenn 10.000 Datensätze in einem verknüpften Set sind.
Jetzt habe ich eine Methode in einer DAO-Klasse, die mir ein Benutzerobjekt zurückgeben soll. Es enthält Auflistungen, die verknüpfte Tabellen der Datenbank darstellen. Ich muss ein Objekt nach ID abrufen und dann seine Sammlungen abfragen.
Hibernate "fehlgeschlagen zu initialisieren eine Sammlung" Ausnahme tritt auf, wenn ich versuche, auf die verknüpfte Sammlung zuzugreifen, die diese DAO-Methode zurückgibt.
Erklären Sie bitte, was ist ein Workaround hier?
Update: Alles klar, lass mich dich das fragen. Da DAO eine abstrakte Ebene ist, soll eine Methode "getUserById (Integer id)" ein Objekt zurückgeben.
Was, wenn in einigen Fällen ich diese verknüpften Sammlungen des Benutzerobjekts benötige und in anderen Situationen brauche ich diese Sammlungen.
Gibt es nur zwei Möglichkeiten: 1) verzögertes Laden = false 2) erstellen, um verschiedene Methoden: getUserByIdWithTheseCollections(), getUserByIdWithOtherCollections() und innerhalb dieser Methoden Ihren Ansatz verwenden?
Ich meine, gibt es nur 2 Möglichkeiten und nichts besseres?
Update 2: Erklären Sie bitte, was würde mir die ausdrückliche Verwendung von SESSIONFACTORY geben? Wie sieht es in der Praxis aus? Wir erstellen eine Instanz des DAO-Objekts und injizieren sie dann mit der Sitzungsfactory. Dies würde bedeuten, dass zwei aufeinanderfolgende Methodenaufrufe von an DAO innerhalb derselben Transaktion ausgeführt werden. Es scheint mir, dass DAO unabhängig von den Klassen ist, die es nutzen!
Die Logik und die Transaktionen sind in DAO gekapselt, richtig?
@Konrad Garus meine Nachschrift der Frage Bitte beachten Sie, hier ist der Text weniger lesbar, so frage ich Sie da. – EugeneP
@EugeneP Siehe aktualisierte Antwort. –