598 Stimmen

Wo gehört die @Transactional-Anmerkung hin?

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?

5voto

Alin Punkte 316

enter image description here

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

2voto

salsinga Punkte 1839

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.

1voto

Spark-Beginner Punkte 1254

Ich bevorzuge die Verwendung von @Transactional auf der Dienstebene auf der Methodenebene.

1voto

aihsts Punkte 15

@Transactional in der Dienstebene verwendet, die über die Steuerungsebene aufgerufen wird ( @Controller ) und der Aufruf der Dienstschicht an die DAO-Schicht ( @Repository ), d.h. datenbankbezogene Operationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X