2012-01-11 4 views
0

一部のオブジェクトが大きく読み込まれ、他のオブジェクトはレイジーロードされると予想されるいくつかのハイバネートクエリがあります。 私が現在熱心に読み込んでいることを確認するための私の現在の承認は、プロパティにアクセスするのにかかる時間を測定することです。プログラマチックにレイジー/エイガーロードをチェックする方法

//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. 

システムのパフォーマンスによってテストが失敗するため、このaproachには非常に欠陥があります。より良い方法がありますか?

答えて

3

私が使用し

Hibernate.isInitialized(customer.getProducts()) 
0

2つの方法があります。

  1. は、セッションがロード・メソッドを呼び出した後に閉じていることを確認してくださいコレクションにアクセスしようとすると、それは任意の遅延ロード例外
  2. を投げていないことを確認してくださいHibernate.inInitialized(customer.getProducts())に電話してください。
関連する問題