gpt4 book ai didi

java - Spring 事务单元测试 - Hibernate 查询不回滚

转载 作者:行者123 更新时间:2023-12-01 06:59:23 25 4
gpt4 key购买 nike

我正在使用 Spring 3 和 Hibernate 3.5,我没有让我的事务在测试环境中回滚,这让我担心它们也不会在生产中回滚。

测试类:

@ContextConfiguration(loader = MyConfigurationLoader.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class DashTemplateRepositoryTest extends AbstractMulitpleDataSourceSpringContextTests {

@Autowired
DashTemplateRepository dashTemplateRepository;

@Test
public void testSaveCategory() {
int initialCount = getCategoryCount();

Category c = new Category();
c.setName("mynewcategory");
dashTemplateRepository.save(c);

assertEquals(initialCount + 1, getCategoryCount());
}
}

它扩展了自定义类:

public abstract class AbstractTransactionalTemplateTests extends AbstractTransactionalJUnit4SpringContextTests {

protected SimpleJdbcTemplate simpleJdbcTemplate;

@Autowired
DashTemplateRepository dashTemplateRepository;

@Resource(name = "dashDataSource")
public void setDataSource(final DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
} ..snip...

更新:我需要执行 simpleJdbcTemplate 插入,因为我有多个数据源,默认情况下这个测试类无法处理它,我无法找到 Spring 支持的解决方案,但在 Spring 论坛上,贡献者发布了这个解决方法。在我提取这个父类(super class)之前就存在回滚问题。我假设问题比这更基本,hibernate 似乎不知道事务管理器,有什么方法可以证明这一点?

数据源Bean:

<bean id="dashDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dashtemplate"/>
<property name="username" .../>
<property name="password" .../>
</bean>

我的 Context-text.xml(简化,省略了其中一些)

<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dashDataSource" />
<property name="annotatedClasses">
<list>
<value>com.dash.Category</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>

<bean id="dashTemplateRepository" class="com.wdp.DashTemplateRepositoryHibernateTemplateImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

测试运行良好,我的对象被持久化,但它永远不会回滚,也没有出现任何错误

最佳答案

问题是 MySQL 使用 MyISAM 而不是 InnoDB - MyISAM 不支持回滚

关于java - Spring 事务单元测试 - Hibernate 查询不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3231943/

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