Как я могу создать модульный тест в Java, который может гарантировать, что мои объекты базы данных JPA загружаются лениво?

Я хотел бы создать модульные тесты для уровня сохраняемости моего проекта, чтобы гарантировать, что объекты загружаются лениво. Я использую спящий с springsource. Что такое базовый модульный тест, который может гарантировать, что я могу создать Утверждение, чтобы проверить это? По крайней мере, проблема для меня заключается в том, что, находясь в транзакции, я не могу сказать, будут ли объекты извлекаться лениво, загружаться по требованию или охотно извлекаться.

Спасибо

1 ответ

Решение

Если у вас есть отсоединенный объект, при попытке доступа к свойству hibernate выдаст исключение LazyInitializationException.

@Test(expected=LazyInitializationException.class)
public void lazyLoadTest() {
  //get a session object
  Session session = dao.getSession(); 

  //load object
  Foo foo = dao.findById(1);

  //if you have a detached object, this would be unnessary
  session.close();  

  //if lazy loading is working, an exception will be thrown
  //note: If you don't try to access the collection (.size(), the data will not be fetched)
  foo.getBars().size(); 
}

Вы также можете использовать Hibernate.isInitialized

@Test
public void anotherLazyLoadTest() {
      //get a session object
      Session session = dao.getSession(); 

      //load object
      Foo foo = dao.findById(1);

      //if you have a detached object, this would be unnessary
      session.close();  

      boolean isInitialized = Hibernate.isInitialized(foo.getBars());
      assertFalse(isInitialized);
}
Другие вопросы по тегам