У меня настроен тест @Transactional JUnit, и я хочу сохранить некоторые тестовые данные в базе данных, а также проверить правильность ассоциаций.
Однако при тестировании ассоциаций они всегда оцениваются как нулевые, даже если это работает в нетранзакционном тесте.
Я сохраняю два объекта, используя аннотацию @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, он, однако, работает хорошо.
edit сохранение сущностей внутри теста вместо метода @Before, не имеет значения.