2015-02-25 4 views
5

Ich habe ein Quelldaten-Jpa-Programm mit this Tutorial entwickelt. Dann wurde es geändert, indem eine neue Klasse/Methode hinzugefügt wurde, um die @Transactional Annotation von spring zu testen.Kompilierungsfehler bei der Verwendung von @Transactional mit dem Propagierungsattribut

@Transactional 
public void txnMethod() { 
    repository.save(new Customer("First Customer","")); 
    repository.save(new Customer("Second Customer","")); 
    ... 
} 

Der obige Code kompiliert und ordnungsgemäß ausgeführt. Dann modifizierte ich den Code explictly Ausbreitungsmodus eingestellt, wie unten gezeigt, aber das gibt mir einen Übersetzungsfehler - „Das Attribut Ausbreitung wird für den Annotationstyp undefined Transactional“

@Transactional(propagation=Propagation.REQUIRED) 
public void txnMethod() { 
    repository.save(new Customer("First Customer","")); 
    repository.save(new Customer("Second Customer","")); 
    ... 
} 

Wie kann ich die Ausbreitung angeben Modus explizit? Unten sind die Abhängigkeiten in build.gradle. Bin mit Federverschluß Version 1.2.1.RELEASE

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-jdbc") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile("org.springframework.boot:spring-boot-starter-web") 
    compile ("org.springframework.boot:spring-boot-starter-tomcat") 
    compile("com.h2database:h2")          
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") 
} 
+0

Ist Ihre '@ Transactional'' javax.transaction.Transactional' oder 'org.springframework.transaction.annotation.Transactional'? Das spätere findet sich in 'spring-tx.jar' und unterstützt' Propagation', das auch in 'spring-tx.jar' zu finden ist. – manish

+0

Die @Transactional ist * import javax.transaction.Transactional * –

+0

Es ist das Problem. Sie müssen 'org.springframework.transaction.annotation.Transactional' verwenden. – manish

Antwort

9

Wenn mit Anwendungen arbeiten, die eine direkte oder transitive Abhängigkeit von Spring Data, zwei Klassen mit dem Namen @Transactional sind auf der Kompilierung-Classpath verfügbar. Einer davon ist javax.persistence.Transactional und der andere ist org.springframework.transaction.annotation.Transactional. Es ist die spätere Klasse, die für die deklarative Transaktionsverwaltung mit Spring verwendet werden muss. Die Enumeration Propagation wird auch nur von der späteren Klasse unterstützt. Ersteres unterstützt eine andere Annotation mit der Bezeichnung TxType.

Sie sicher, dass die @Transactional Sie ist von der Art anwenden org.springframework.transaction.annotation.Transactional als IDEs manchmal einen Import für javax.persistence.Transactional hinzufügen, während der Benutzer @Transactional eingeben wird. Der Versuch, der Annotation Propagation hinzuzufügen, schlägt fehl, da javax.persistence.Transactional diese Aufzählung nicht unterstützt.

Verwandte Themen