2016-07-30 3 views
2
  1. @EnableTransactionManagement hinzugefügt wird auf MyBootApplication
  2. @Bean public Object testBean(PlatformTransactionManager platformTransactionManager){ System.out.println(">>>>>>>>>>TransactionManager is " + platformTransactionManager.getClass().getName()); return new Object(); } es Transaction drucken ist org.springframework.orm.jpa.JpaTransactionManager
  3. @Service open class UserService : BaseService() { @Autowired lateinit var repository: UserRepository @Transactional fun updateValid(id: Long, valid: Boolean) { ErrorConstant.ParamErrorCode.IdIsNull.caseThrow { id == 0.toLong() } repository.updateValid(id,valid) } }

i spring.boot benutze mein Projekt zu erstellen.Nach dem Hinzufügen von @Transactional zu Methode, kann diese Klasse (Service) nicht Autowired Bean (Repository)?

Wenn ich die @ Transactional entfernen, ist alles in Ordnung.

aber wenn ich es addiere. Das Repository ist null, es kann nicht injiziert werden.

Ich habe diese Frage Using @Transaction annotation with @Autowired - Spring gelesen, und ich füge spring.aop.proxy-target-class=true in meine application.properties, immer noch gleichen Fehler.

Ich benutze Kotlin, um es zu schreiben, aber ich denke, das ist nicht der Grund.

auch so, ich werde später mit Java versuchen.

Mein Fehler, ich habe einige Eigenschaften in BaseService, sollte auch darauf öffnen.

+0

Ich hatte das gleiche Problem, weil ich @Transactional aus javax.transaction Paket verwendet. Nach dem Wechsel zu org.springframework.transaction.annotation funktioniert es. – Danix

+0

Vielleicht zu https://stackoverflow.com/questions/41298289/spring-boot-autowired-with-kotlin-in-services-always-null duplizieren – miran

Antwort

1

Ich habe 'open' auf func noch hinzugefügt, aber lassen Sie die Eigenschaften.

@PersistenceContext 
protected open lateinit var em: EntityManager 

@Autowired 
protected open lateinit var env: Environment 
Verwandte Themen