spring – 在@Transactional Junit Tests中使用域对象的双向关
发布时间:2020-12-15 01:45:34 所属栏目:大数据 来源:网络整理
导读:我有一个@Transactional JUnit测试设置,我想将一些测试数据保存到数据库,并测试关联是否正确. 但是,在测试关联时,它们总是评估为null,即使它在非事务性测试中有效. 我使用@Before注释保留两个对象: @Beforepublic void testData() { TestObjectOne o = new
我有一个@Transactional JUnit测试设置,我想将一些测试数据保存到数据库,并测试关联是否正确. 我使用@Before注释保留两个对象:
在测试中访问这两个对象时,我得到了正确的实例:
检查t和o之间的关联时,我得到了正确的引用,因为我明确定义了该关联:
但是当反过来检查时,对象o没有正确更新:
该关联在域对象中定义为 在一:
成两半:
当我没有以@Transactional运行测试时,它运行得很好. 编辑保存测试中的实体而不是@Before方法,没有任何区别. 最佳答案
您需要在保存之后和加载测试对象之前刷新并清除当前会话以进行断言.
当您保存TestObjectOne时,它的实例将保留在Hibernate会话中.比你创建TestObjectTwo并添加对o的引用并保存它所以这个实例现在也保存在Hibernate会话中.比你调用时获取Hibernate获取你之前创建的实例而不更新它们以反映实际状态.因此,您需要在加载之前刷新并清除会话 – 而会话L1缓存将为空,并且实体将被核心加载.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |