Hibernate 如何通过编程检查延迟/急切加载

Hibernate 如何通过编程检查延迟/急切加载,hibernate,unit-testing,automated-tests,Hibernate,Unit Testing,Automated Tests,我有一些hibernate查询,其中我希望一些对象是快速加载的,而另一些是延迟加载的。 我目前检查急切加载的方法是测量访问属性所需的时间 //Call the method i want to test. Customer customer = loadCustomerWithProducts(); long start = System.currentTimeMillis(); //Call a method on an object that sould have been eagerl

我有一些hibernate查询,其中我希望一些对象是快速加载的,而另一些是延迟加载的。 我目前检查急切加载的方法是测量访问属性所需的时间

//Call the method i want to test.
Customer customer = loadCustomerWithProducts();

long start = System.currentTimeMillis();

//Call a method on an object that sould have been eagerly loaded.
customer.getProducts().get(0).getName();

long end = System.currentTimeMillis();
long diff = end - start;

Assert.assertTrue(diff < 50); //Assuming that hitting the database takes longer than 50ms.
//调用我要测试的方法。
客户=loadCustomerWithProducts();
长启动=System.currentTimeMillis();
//对一个本应被急切加载的对象调用一个方法。
customer.getProducts().get(0.getName();
long end=System.currentTimeMillis();
长差=结束-开始;
Assert.assertTrue(差异<50)//假设命中数据库的时间超过50毫秒。
这种方法有很大的缺陷,因为测试将根据系统性能而失败。有更好的方法吗?

有两种方法:

  • 确保在调用load方法后关闭会话,尝试访问集合,并检查它是否未引发任何延迟加载异常
  • 打电话
  • 有两种方法:

  • 确保在调用load方法后关闭会话,尝试访问集合,并检查它是否未引发任何延迟加载异常
  • 打电话
  • 我会用

    Hibernate.isInitialized(customer.getProducts())
    
    我会用

    Hibernate.isInitialized(customer.getProducts())