2017-11-14 1 views
0

Ich habe ein seltsames Verhalten der Feder DB-Transaction-Handling Ich versäume es, meinen Kopf zu wickeln.JPA-Repository lesen Zugriff Commits äußere Transaktion

den folgenden Code Gegeben:

@Transactional 
    public void saveDocumentToDB() { 

     dbService.addNewEntity('123', 'helloWorld'); 
     DbEntity dbEntity = dbService.getEntityByID('someId'); 

     throw new RuntimeException(); 
    } 

Wo dbService einige @Service -Klasse mit Zugang zu einem JPA- CrudRepository.

Mein Problem: Die getEntityByID -Methode, die wiederum eine Methode auf dem automatisch generierten Repository-Objekt aufruft, schreibt die Transaktion fest und schreibt so den ersten 'add'-Aufruf in die Datenbank.

Ohne diesen Aufruf wird die Transaktion wieder schön gerollt ...

Haben Sie einen Rat, wie die automatisch generiert, um CRUD-Methoden, um die Transaktion als auch respektieren?

Antwort

0

In meinem application.properties, benutzte ich

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect

was zu Hibernate seine Tabellen mit MyISAM-Motor zu erzeugen, die keine Transaktionen unterstützen (und Fremdschlüssel).

habe ich es zu

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect 

und das db-Schema wieder aufgebaut.

Ich finde es ziemlich unintuitiv, dass der angebliche Standard "MySQL5Dialect" nicht die Standard-Engine, sondern MyISAM verwendet.

Vielleicht hilft es jemandem in der Zukunft.

Verwandte Themen