Sollten Sie die @Transactional
im DAO
Klassen und/oder deren Methoden oder ist es besser, die Dienstklassen zu annotieren, die die DAO-Objekte verwenden? Oder ist es sinnvoll, beide "Schichten" zu annotieren?
Antworten
Zu viele Anzeigen?Le site @Transactional
sollte auf der Dienstebene verwendet werden, da sie die Geschäftslogik enthält. Die DAO-Schicht enthält in der Regel nur Datenbank-CRUD-Operationen.
// the service class that we want to make transactional
@Transactional
public class DefaultFooService implements FooService {
Foo getFoo(String fooName);
Foo getFoo(String fooName, String barName);
void insertFoo(Foo foo);
void updateFoo(Foo foo);
}
Frühling doc : https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html
Im Idealfall stellt die Dienstschicht (Manager) Ihre Geschäftslogik dar und sollte daher mit @Transactional
Die Serviceschicht kann verschiedene DAOs aufrufen, um DB-Operationen durchzuführen. Nehmen wir eine Situation an, in der Sie N DAO-Operationen in einer Dienstmethode haben. Wenn Ihre 1. DAO-Operation fehlschlägt, werden die anderen möglicherweise weitergereicht und Sie erhalten einen inkonsistenten DB-Status. Das Annotieren der Service-Schicht kann Sie vor solchen Situationen bewahren.
- See previous answers
- Weitere Antworten anzeigen