gpt4 book ai didi

java - 事务看似回滚,但数据库中并没有回滚

转载 作者:行者123 更新时间:2023-11-30 04:44:12 25 4
gpt4 key购买 nike

PersistenceHelper-context.xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <!---->
<property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver"/>
<property name="url" value="jdbc:hsqldb:mem:mydb"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
depends-on="dataSource" name="_sessFac" >
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="hibernate.cfg.xml.incDTD"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.shutdown">true</prop>
</props>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

类头

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:PersistenceHelper-context.xml"})
@TransactionConfiguration(defaultRollback = true, transactionManager = "transactionManager")
@Transactional
public class BaseClass extends BaseTestClass{//.....}

然后我想要使用事务的所有类都派生自 BaseClass,即公共(public)类 FooTest 扩展 BaseClass

此外,当我运行代码时,我看到以下内容:

HibernateTransactionManager | Initiating transaction rollback
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Rolling back Hibernate transaction on Session [org.hibernate.impl.SessionImpl@107536b]
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Triggering afterCompletion synchronization
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Clearing transaction synchronization
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Removed value [org.springframework.orm.hibernate3.SessionHolder@17b3cdb] for key [org.hibernate.impl.SessionFactoryImpl@14642ac] from thread [main]
[13 Jul 2012 11:29:13,738] DEBUG TransactionSynchronizationManager | Removed value [org.springframework.jdbc.datasource.ConnectionHolder@129a6a3] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@c506b] from thread [main]
[13 Jul 2012 11:29:13,738] DEBUG HibernateTransactionManager | Closing Hibernate Session [org.hibernate.impl.SessionImpl@107536b] after transaction
[13 Jul 2012 11:29:13,738] DEBUG SessionFactoryUtils | Closing Hibernate Session
[13 Jul 2012 11:29:13,738] INFO TransactionalTestExecutionListener | Rolled back transaction after test execution for test context

但是,当我从数据库中删除时,更改将被保留,并且我 future 的测试会失败,因为表中缺少对象。我错过了什么吗?任何方向将不胜感激。提前致谢!!

最佳答案

您应该使用 sessionFactory.getCurrentSession() 来获取与当前事务关联的 Session

openSession() 创建一个新 session ,该 session 与 Spring 管理的事务无关。

关于java - 事务看似回滚,但数据库中并没有回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com