我正在使用Spring Data JPA和HSQLDB,并将OpenJPA作为JPA提供程序。
创建了2个测试类(SpringBootTest
),它们依次执行,都使用相同的存储库来保存(使用save()
的CrudRepository
)实体。
@Entity(name = "theentity")
public class TheEntity {
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Id
private int id;
}
@Bean
public PlatformTransactionManager transactionManager() {
final JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(entityManagerFactory());
return tm;
}
问题是,当我运行第二个测试类时,我希望清除包含identity
列起始值的持久性。
但是上面没有发生。
使用休眠时,添加注释:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
测试类之上为我完成了所有工作(回滚),不幸的是,注释对OpenJPA没有任何作用。
是否有其他替代方法?也许需要在persistence.xml
内添加一些属性或向TransactionManager
bean中添加某些内容?
默认情况下,数据JPA测试是事务性的,并在最后回滚每个测试。
摘自文档数据JPA测试还可以注入TestEntityManager bean,提供了标准JPA EntityManager的替代方案,即专为测试而设计。
示例和详细信息here