Sembra che la mia configurazione perdere questa linea:
<tx:annotation-driven transaction-manager="txManager"/>
Poi, nelle mie classi di servizio, io uso @Transactional annotazione. Per esempio
@Service
class CompanyServiceImpl implements CompanyService{
@Autowired
private CompanyDAO companyDAO;
@Transactional
public void addCompany(Company company) {
companyDAO.addCompany(company); // in here, there is JDBC sql insert
companyDAO.addCompany_fail(company); // just for test
}
}
Se c'è un'eccezione accade nel addCompany_fail(), il primo addCompany() si sarà anche annullate da una rollback.
Ho seguito questo documento per capire come si gestiva la transazione in primavera. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html
Ho seguito questo documento per capire come codificare con JDBC in primavera. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html
Ho letto anche questo (gratuito) http://www.infoq.com/news/2009/04/java-transaction-models-strategy. È davvero buono. E sento lo stesso con lo scrittore che la maggior parte delle persone non capisce (o cura) della transazione.
PS: Sembra che molte persone fraintendano che l'utilizzo di tale framework Hibernate/Spring è solo per evitare la complessità di JDBC e Transaction Control. Molte persone pensano che "JDBC e Transaction sono così complesse, basta usare Hibernate e dimenticare quei due". Molti esempi su Internet di Spring + Hibernate o Spring + JDBC sembrano non interessare affatto alla transazione. Sento che questo è un brutto scherzo. La transazione è troppo seria per aver semplicemente permesso a qualcosa di gestirlo senza una vera comprensione.
Hibernate e Spring sono così potenti e così complessi. Quindi, come qualcuno ha detto, "Il grande potere arriva con le responsabilità".
AGGIORNAMENTO: 2013-08-17: C'è un buon esempio di transazione qui . Tuttavia, questo non è spiegare che se si desidera utilizzare REQUIRES_NEW, perché è necessario creare un'altra classe (in caso contrario si otterrà questo problema Spring Transaction propagation REQUIRED, REQUIRES_NEW, che a quanto pare REQUIRES_NEW in realtà non creare una nuova transazione)
Aggiornamento: 2018 -01-01: Ho creato un esempio completo con Spring Boot 1.5.8.STAMPA qui https://www.surasint.com/spring-boot-database-transaction-jdbi/ e alcuni esempi di esperimento di base qui https://www.surasint.com/spring-boot-connection-transaction/
E questo ha funzionato perché il gestore delle transazioni Spring disattiva il commit automatico e esegue i propri commit? – Raedwald