Ich habe über den Sun Blueprint GenericDAO
implementation und Gavin King's zur Verwendung mit Hibernate gelesen. Es scheint, dass er nichts über den Umgang mit Transaktionen erwähnt:
Ich bin verwirrt, wo ich den Anfang / das Ende der Transaktion setzen sollte. Derzeit befinden sie sich in den DAOs, die diese GenericHibernateDAO
Soll die Transaktionsverarbeitung vom Aufrufer des DAO in der Anwendungsebene verwaltet werden?
Im Allgemeinen empfiehlt es sich, Transaktionen in der Serviceebene nicht in der DAO-Ebene zu verwalten. Jede DAO-Methode behandelt im Allgemeinen eine bestimmte Operation und eine Servicemethode aggregiert sie in einer Transaktion.
Transaktionen sollten in der Anwendungsebene verwaltet werden. Sagen Sie zum Beispiel, Sie hätten ein AccountDAO:
%Vor% Wenn ich Geld zwischen Konten transferieren wollte, würde ich DebitAccount
auf einem Konto und CreditAccount
auf einem anderen Konto aufrufen. Ich möchte, dass diese Anrufe in derselben Transaktion stattfinden. Die DAO kann das unmöglich wissen, aber die Anwendungsebene würde es tun.
Wenn Transaktionen auf der DAO-Ebene verwaltet würden, müssten Sie eine weitere TransferMoney
-Methode für das DAO erstellen, um dies in einer Transaktion zu tun. Dies würde schließlich Ihre DAO-Ebene aufblähen und bei komplexen Operationen Geschäftslogik einbringen, die wahrscheinlich nicht da sein sollte. Und es wird noch unordentlicher, wenn Sie eine Operation haben, die erfordert, dass mehrere DAOs an einer einzigen Transaktion beteiligt sind.
Tags und Links java hibernate data-access-layer