2015-02-25 9 views
5

Ho sviluppato un programma jpa di dati di primavera utilizzando il tutorial this. Quindi lo ha modificato aggiungendo una nuova classe/metodo per testare l'annotazione @Transactional di Spring.Errore di compilazione quando si utilizza @Transactional con attributo di propagazione

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

Il codice sopra riportato è stato compilato ed eseguito correttamente. Poi ho modificato il codice per impostare esplicitamente la modalità di propagazione come illustrato di seguito, ma questo mi dà un errore di compilazione - "La propagazione di attributo non è definito per il tipo di annotazione transazionale"

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

Come è possibile specificare la propagazione modalità esplicitamente? Di seguito sono riportate le dipendenze in build.gradle. Sto usando la primavera di avvio versione 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

È il tuo '@ Transactional'' javax.transaction.Transactional' o 'org.springframework.transaction.annotation.Transactional'? La successiva è trovata in 'spring-tx.jar' e supporta' Propagation', che si trova anche in 'spring-tx.jar'. – manish

+0

Il @Transactional è * import javax.transaction.Transactional * –

+0

C'è il problema. È necessario utilizzare 'org.springframework.transaction.annotation.Transactional'. – manish

risposta

9

Quando si lavora con applicazioni che hanno una dipendenza diretta o transitiva su dati Primavera, due classi con il nome @Transactional sono disponibili sul tempo di compilazione classpath. Uno di questi è javax.persistence.Transactional e l'altro è org.springframework.transaction.annotation.Transactional. È la classe successiva che deve essere utilizzata per la gestione dichiarativa delle transazioni con Spring. L'elenco Propagation è supportato anche dalla classe successiva. Il primo supporta un'annotazione diversa chiamata TxType.

fate in modo che il @Transactional si sta applicando è del tipo org.springframework.transaction.annotation.Transactional come IDE a volte aggiungono un'importazione per javax.persistence.Transactional mentre l'utente sta scrivendo @Transactional. Quindi, il tentativo di aggiungere Propagation all'annotazione non riesce perché javax.persistence.Transactional non supporta questa enumerazione.

Problemi correlati