因此,在最新版本的Spring中,我们可以使用@Configuration
注释来设置Spring的配置.现在,在JavaConfig中,可以使用@AnnotationDrivenTx
(@AnnotationDrivenTx Reference Link)批注在Config类中设置事务.但是由于JavaConfig已经退役,我想知道是否有人知道如何在没有JavaConfig的情况下设置类似的东西而不需要添加任何内容application-context.xml
.这是我基本上用于Config类的内容
@Configuration
@ImportResource("config/application-context.xml")
public class Config {
public @Bean DataSource dataSource() {
//get and return datasource
}
public @Bean Service1 getService1() {
//return service1Impl
}
}
Run Code Online (Sandbox Code Playgroud)
而且我想做Service1
交易.如果有人对如何做到这一点有任何想法,或者如果这是不可能的,请告诉我.
谢谢!
我想使用spring测试框架测试hibernate session的save()方法.@Test方法是:
@Test
@Transactional
public void testSave() {
User expected = createUser();
getGenericDao().currentSession().save(expected);
User actual = getUser(generatedId);
assertUsersEqual(expected,actual);
}
Run Code Online (Sandbox Code Playgroud)
我想将用户刷新到数据库中.我想让我的用户在这个方法之后进入数据库
getGenericDao().currentSession().save(expected);
Run Code Online (Sandbox Code Playgroud)
然后我想使用spring数据框架转到数据库,并通过下一行获取此保存的用户:
User actual = getUser(generatedId);
Run Code Online (Sandbox Code Playgroud)
我尝试使用hibernate flush方法,如:
currentSession().setFlushMode(MANUAL);
//do saving here
currentSession().flush();
Run Code Online (Sandbox Code Playgroud)
它不会将我的用户刷新到数据库中!但是,如果我没有使用@Transactional spring注释并将我的用户保存在编程弹簧事务中,那么我实现了我想要的.不幸的是,由于没有spring @Transactional,因此保存到db的用户不会回滚.因此,我的测试方法会更改后续测试方法的db和行为.
所以我需要将我的用户刷新到db里面的测试方法(不是在最后),并在测试方法结束时回滚所有对db的更改.
UPDATE建议准备方法如下:
@Transactional
public void doSave(User user){
getGenericDao().currentSession().save(user);
}
Run Code Online (Sandbox Code Playgroud)
并且在testSave中调用doSave什么都不做.执行此方法后,我仍然没有db中的用户.我设置断点并从命令行检查我的数据库.
更新非常感谢您的回复.问题是方法flush()不会将我的用户放入数据库.我尝试了Isolation.READ_UNCOMMITTED并且它没有将我的用户放入数据库.我可以实现我想要的,但前提是我在@Test方法上关闭spring事务并在程序化事务中保存.然后@Test方法不回滚,为后续的@Test方法留下保存的用户.这里保存用户的@Test方法不像删除用户的@Test方法那样危险,因为它没有回滚.因此必须对@Test方法提供Spring事务支持,我无法将我的用户(或删除)放入db.实际上,只有在@Test方法结束并且@Test方法的事务被调用后,才会将用户放入(或删除)到db中.所以我想在@Test方法的中间将我的用户保存到db中,并在@Test方法结束时回滚它
谢谢!
java hibernate spring-test hibernate-session spring-transactions