我设置了@Transactional JUnit 测试,我想将一些测试数据保存到数据库中,并测试关联是否正确。但是,在测试关联时,它们总是评估为 null,即使它在非事务测试中确实有效。
我使用 @Before 注释保留了两个对象:
@Before
public void testData() {
TestObjectOne o = new TestObjectOne();
o.setName("One");
repo.saveEntity(o); //autowired
TestObjectTwo t = new TestObjectTwo();
t.setOne(o);
t.setName("Two");
repo.saveEntity(t);
}
在测试中访问这两个对象时,我得到了正确的实例:
TestObjectOne o = repo.getOneByName("One");
TestObjectOne t = repo.getTwoByName("Two");
检查 和 之间的关联时t
,o
我得到了正确的参考,因为我明确定义了该关联:
Assert.assertNotNull(t.getOne());
但是当反过来检查时,对象o
没有正确更新:
Assert.assertNotNull(o.getTwos());
关联在域对象中定义为
在One
:
@OneToMany(mappedBy = "one", fetch = FetchType.EAGER)
private List<Two> twos;
在Two
:
@ManyToOne(optional = false)
private One one;
当我没有以@Transactional 运行测试时,它运行良好。
编辑 保存测试中的实体而不是 @Before 方法,没有任何区别。