Gibt es jemals einen Fall in einer Standard-Webanwendung, wo man einen EntityManager oder eine Session als Parameter an einen DAO-Aufruf übergeben würde, d. H. findPersonByName(String name, Session session)
? Oder sollte das Öffnen und Schließen der Sitzung bei der Umsetzung abstrahiert werden?Haben Sie bei einem DAO-Muster den EntityManager oder die Session jemals als Parameter verfügbar gemacht?
3
A
Antwort
7
Ein besserer Ansatz wäre, das DAO mit dem SessionFactory
zu initialisieren oder anderweitig zu injizieren. Dann können Sie Dinge tun, wie folgt:
public abstract class AbstractHibernateDao<T extends Object>
implements AbstractDao<T> {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public void save(T t) { getSession().save(t); }
public void update(T t) { getSession().update(t); }
...
}
ohne Session
s überall passieren zu müssen.
0
Nein, es sollte nie verwendet werden, aber eine Service-Schicht könnte. Stellen Sie sich vor, Sie haben zwei verschiedene Methoden (in möglicherweise verschiedenen DAOs), die in derselben Transaktion gekapselt werden müssen (Commit/Rollback), als Sie das gleiche Verbindungsobjekt verwenden möchten/müssen.
Verwandte Themen
- 1. Haben Sie jemals von einer Lizenzübertragungsgebühr bei der Übernahme gehört?
- 2. Haben Sie jemals Reflektor reflektiert?
- 3. Welche Erfahrungen haben Sie mit NetAdvantage oder DXperience gemacht?
- 4. Was ist die beste Form, die Sie jemals gesehen haben?
- 5. Haben Sie jemals Design-Muster "Position" gehört?
- 6. Nimmt eine rekursive Methode jemals ein Klassenattribut/Datenfeld als Parameter?
- 7. Konnte Grand Central Dispatch (`libdispatch`) jemals unter Windows verfügbar gemacht werden?
- 8. Unterschied zwischen Hibernate Session und EntityManager
- 9. Haben Sie jemals private Erweiterungsmethoden verwendet?
- 10. Sollte ich die Daten komprimieren, die über den WCF-Dienst verfügbar gemacht werden?
- 11. Haben Sie jemals ein Projekt gesehen, das ordnungsgemäß verwaltet wurde?
- 12. Beeinflusst die Garbage Collection jemals den Stack?
- 13. Haben Sie die Spieltheorie bei einem Projekt angewendet?
- 14. Haben Sie jemals eine signifikante Beschleunigung mit boost :: pool erreicht?
- 15. Laravel 5 Session nicht verfügbar für die zweite Seite
- 16. Keine Transaktions EntityManager verfügbar und Ausnahme InvalidDataAccessApiUsageException
- 17. Haben Sie jemals NSZoneMalloc() anstelle von malloc() verwendet?
- 18. symfony2 Anfügen von Session-ID an URL als GET-Parameter
- 19. Benutzerdefinierte Session # Parameter erstellen
- 20. Array als Session-Variable
- 21. Haben Sie jemals eine "Klasseninstanzvariable" in Ihrem Ruby-Code verwendet?
- 22. Warum werden TypeLib-Enums in Visual Basic 6.0 nicht als Enums verfügbar gemacht?
- 23. Haben Sie während des Interviews jemals eine unerwartete Antwort erhalten?
- 24. Haben Sie jemals einen genetischen Algorithmus in realen Anwendungen verwendet?
- 25. Wie bekomme ich alle Twitter-Updates, die jemals von einem Benutzer gemacht wurden?
- 26. Kann ersten Parameter nicht als optional haben
- 27. Hat jemand jemals eine grundlegende 'Scan-Animation' auf einem Bild gemacht?
- 28. Eclipselink: Wie erhalten Sie den EntityManager in jedem Paket?
- 29. Verwenden Organisationen jemals SharePoint auf einem anderen Port als 80?
- 30. Haben Sie Vorschläge, wie Sie eine Website als Session-Proof ablegen können?
Ja, ich wollte eine 'EntityManagerFactory' verwenden. Ich habe mich nur gefragt, ob es jemals einen Fall gab, bei dem ein 'EntityManager' initialisiert und außerhalb des Service übergeben wurde. Auch mit der 'getSession()' Methode, wo/wann wird die aktuelle Sitzung initialisiert? – jtgameover
Nun, es ist schwer "niemals" zu sagen, aber das möchte ich sagen. Die Standardpraxis besteht darin, dass der Service die Transaktionsverwaltung einkapselt, und die Sitzungstafel (Öffnen/Schließen usw.) typischerweise im Kontext des Transaktionsmanagements ... [mehr] –
Es gibt ein paar Ansätze hier. Eine Art wäre es, eine Art Proxy-Mechanismus zu verwenden (z. B. Spring bietet TransactionManager unterschiedlicher Art an), um Ihre Service-Beans auf transparente Weise zu umbrechen. Der TransactionManager kennt die Factory und behandelt Session-Init. [mehr] –