spring声明式事务无效的问题

shadowwh 2008-12-11 05:37:55
我按照声明式事务的方式配置了事务。然后在测试代码中增加了一段错误的脚本(连续插入4条数据,其中第三条错误)。结果测试后,从log上看到系统已经rollback。然后立即查询数据库,的确一条都没有插入,但是过了十几秒后在进行查询,发现前面两条没有错误的数据被插入了,而且此时console上没有人任何的log显示。
下面是显示的Log,还请高人指点一下,非常感谢!
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.jdbc.datasource.DataSourceTransactionManager - Rolling back JDBC transaction on Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@1558dc]
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.jdbc.datasource.DataSourceTransactionManager - Triggering afterCompletion synchronization
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.hibernate.jdbc.ConnectionManager - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.transaction.support.TransactionSynchronizationManager - Clearing transaction synchronization
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.transaction.support.TransactionSynchronizationManager - Removed value [org.springframework.jdbc.datasource.ConnectionHolder@17d03c5] for key [com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 2sa1hd7yaaauoq1pey0ny|1c50507, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> oracle.jdbc.driver.OracleDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2sa1hd7yaaauoq1pey0ny|1c50507, idleConnectionTestPeriod -> 0, initialPoolSize -> 1, jdbcUrl -> jdbc:oracle:thin:@localhost:1521:shadow, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 20, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 2, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]] from thread [http-8088-1]
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.jdbc.datasource.DataSourceTransactionManager - Releasing JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@1558dc] after transaction
<08/12/11 16:43:08> <DEBUG> <http-8088-1> org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
...全文
276 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowwh 2008-12-12
  • 打赏
  • 举报
回复
已经找到问题了。
transactionManager配置错误,没有使用org.springframework.orm.hibernate3.HibernateTransactionManager而使用了org.springframework.jdbc.datasource.DataSourceTransactionManager。
bruni 2008-12-11
  • 打赏
  • 举报
回复
Spring 的TestCase中默认的就是在执行完之后RollBack的.
你要提交, 就setComplete().

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧