java - 如何在 Java 中创建一个单元测试来确保我的 JPA 数据库实体被延迟加载?

标签 java hibernate jpa springsource

我想为我的项目的持久层创建单元测试,以确保实体被延迟加载。我正在使用 hibernate 和 springsource。 什么是可以保证我可以创建断言来检查的基本单元测试? 至少对我来说,这里的挑战是,在事务中,我无法判断实体是延迟获取并按需加载还是急切获取。

谢谢

最佳答案

如果你有一个分离的对象,当你尝试访问该属性时,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);
}

关于java - 如何在 Java 中创建一个单元测试来确保我的 JPA 数据库实体被延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647016/

相关文章:

java - 我在哪里可以找到所有 HQL 关键字的列表?

java - 在 Java 中使用 int a=a+1 和 a++ 的性能差异

java - 将数据库异常信息传输给客户端的最佳实践

jpa - 将 Spring Data 查询构建器与 Spring Data JPA 规范相结合?

java - 链式事务 api 调用 spring

java - Hibernate 在调用 findOne 时返回陈旧的对象

Java - 如何使用 Excelsior JET 构建 exe?

java - 为什么从浏览器下载的文件已损坏?

java - 字符串...对象被称为什么?

hibernate - 将具有 InheritanceType.JOINED 的实体添加到 native 查询