我想使用spring测试框架测试hibernate Session的save()方法。@测试方法为:
@Test
@Transactional
public void testSave() {
User expected = createUser();
getGenericDao().currentSession().save(expected);
User actual = getUser(generatedId);
assertUsersEqual(expected,actual);
}
我想刷新用户到数据库。我希望我的用户在此方法后在数据库中
getGenericDao().currentSession().save(expected);
然后我要使用spring data framework转到database并通过下一行获取这个保存的用户:
User actual = getUser(generatedId);
currentSession().setFlushMode(MANUAL);
//do saving here
currentSession().flush();
@Transactional
public void doSave(User user){
getGenericDao().currentSession().save(user);
}
非常感谢您的回应。问题是方法flush()没有将我的用户放入数据库,我尝试了isolation.read_uncommitted,但它没有将我的用户放入数据库。我可以实现我想要的,但前提是我在@test方法上关闭spring事务,并在编程事务中进行保存。但是@test方法不会回滚,将保存的用户留给后续的@test方法。这里@test方法保存用户不像@test方法删除用户那样危险,因为它不回滚。因此,必须对@Test方法提供spring事务性支持,我无论如何都不能用它将我的用户(或删除)放入数据库。实际上,只有在@test方法结束并结束了@test方法的事务之后,用户才会被放入(或删除)数据库。所以我想把我的用户保存到@test方法中间的数据库中,并在@test方法的结尾回滚它
谢谢!
最后我坚持了下面的解决方案:
首先,我的@test
方法没有在spring@transactional
支持中运行。看看这篇文章,知道它可能有多危险。接下来,我不在@test
方法中使用@repository
beans,而是在@test
方法中使用@service
beans,这些beans使用@transactional
注释。奇迹是@test
这样的方法
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testSave() {
Answer created = createAnswer();
Long generatedId = answerService.save(created);
//at this moment answer is already in db
Answer actual=getAnswerById(generatedId);
... }
将我的应答对象放入数据库(就在answerservice.save(created);
之后),方法getanswerbyid
转到数据库并提取它以检查保存是否正确。
为了消除对@test
方法中数据库的更改,我通过jdbctestutils.executesQLscript
重新创建数据库
我正在使用spring数据jpa为我的服务实现多事务(数据库),带有两个持久的单元名。并在Jboss 6.4 EAP中部署 以下是我的服务详情 在Jboss中,我无法部署它,我遇到以下异常: 原因:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有com.test.demo.domain.repository.Tb
在我的应用程序中,我试图将数据从我的发送到一个名为的服务。这是我的以下代码: MainActivity.class: BGS服务。课程: 但我没有在服务类中获取数据。以下是我得到的错误: 02-25 09:05:41.166:E/AndroidRuntime(2633): JAVAlang.RuntimeException:无法启动活动 组件信息{com.microapple.googleplac
我有三节课 1.菜单活动 2.LocationUpdateService 3.多重标记器 1.菜单活动 2、LocationUpdateService:(这是服务类) 3、多重标记(活动) 我的问题是:当我打开我的菜单活动我的Toast消息打印发送数据到广播接收器,然后点击按钮我调用MultipleMarker。我无法从服务中获取值。。。但当我按下后退按钮时,我重定向到MenuActivity,此
我正在尝试使用SpringJTA-JPA-Hibernate了解事务传播的行为。 本质上,我正在尝试更新一个实体。为此,我编写了一个测试方法,其中我使用实体管理器(em)查找方法获取对象(所以现在这个对象是管理对象)。更新获取的对象的属性。然后可选地调用正在调用em.merge的服务层(服务层传播=必需) 现在我这里有三个变体: > < li> 测试方法没有事务注释。更新提取的对象的属性,不调用服
问题内容: 我在通过Notification从服务向活动发送数据时遇到问题,我单击了一个活动被调用的通知,但是当我尝试通过捆绑包添加一些参数时,我无法获得所谓的intent中的参数,我经历了链接 如何将通知单击中的参数发送到活动? 但是仍然没有运气。 其他人也发生过同样的问题吗? 提前致谢。 问题答案: 您还必须修改清单文件。 这是有效的示例: 这些变量和方法是Service类的成员: 这是Mai
我们正在使用Spring启动,apache骆驼和多个数据源。 我们已经在linux服务器上部署了SpringBootJAR。 postgres的数据源属性为 Oracle的数据源属性 当应用程序保持理想状态时,经过一段时间后,我们尝试第一个请求失败,并得到错误jdbc连接失败,但它在第二个请求中工作,没有重新启动。 请让我知道如何保持数据库活动。