Использование двунаправленных ассоциаций из объектов домена в тестах @Transactional Junit

У меня установлен тест @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;

в Два :

  @ManyToOne(optional = false)
  private One one;

Когда у меня тест не запущен как @Transactional, он работает нормально.

edit сохранение сущностей внутри теста вместо метода @Before не имеет никакого значения .

5
задан chzbrgla 14 July 2011 в 08:42
поделиться