LazyInitializationExceptionリロード異常の4つのソリューション


概要:org.hibernate.LazyInitializationException:could not initialize proxy - no Session
(リラウド異常デフォルトではhibernateはリラウド)は、データを読み込むときにセッションが閉じていることを意味します.
ソリューション(4つ):
1つ目:get属性メソッドに@JSON(Serialize=false)注記を追加し、
このプロパティは、jsonを回転するときに無視されます(現在のセットをjsonに変換して返す必要はありません).
2つ目は、ビジネス・レベル(つまりSessionが閉じる前に)手動クエリー・データがロードされる(手動呼び出し方法でデータを取得する必要がありますが、推奨しないでください)
3つ目:インスタント・キャプチャを構成します(エンティティで@LazyCollectionを構成し、即時取得を示します).たとえば、次のようになります.
@LazyCollection(LazyCollectionOption.FALSE)
private List inOutStorageInfos = new ArrayList();

オブジェクトを問い合せると同時に、InOutStorageInfoのオブジェクトを問い合せることを示します.(参照に加算されていることに注意).
またはOneToMany注記を使用する場合に属性fetch=FetchTypeを追加する.EAGERはすぐにキャプチャすることを示す
@OneToMany(fetch = FetchType.EAGER)
    private List bids = new ArrayList();

4つ目(推奨):
スプリングが提供するOpenSessionInViewFilterのフィルタを使用して、
  
  
  	OpenSessionInViewFilter
  	org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
  
  
  	OpenSessionInViewFilter
  	/*
  

OpenSessionInViewFilterの説明:
1、Hibernateは関連オブジェクト、属性の遅延ロードを許可し、
ただし、遅延ロードの動作は同じHibernate Sessionの範囲内で行うことを保証する必要があります.
サービス層が遅延ロード機能が有効なレルムオブジェクトをWeb層に返す場合、Web層が遅延ロードが必要なデータにアクセスすると、
レルムオブジェクトをロードするHibernate Sessionがオフになっているため、ロードデータへのアクセスが遅延します.
2、Springが提供してくれたOpenSessionInViewFilterは私たちにこの問題をよく解決してくれた.
OpenSessionInViewFilterの主な機能は、1つのHibernateSessionと1回の完全な要求プロセスに対応するスレッドをバインドすることです.
目的は「OpenSession in View」のモードを実現することです.たとえば、トランザクションのコミット後に必要なオブジェクトのロードを遅延させることができます.
Springのjpaを使用する場合は、OpenEntityManagerInViewFilterのフィルタを使用できます.
	
	
		OpenEntityManagerInViewFilter
		org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
	
	
		OpenEntityManagerInViewFilter
		/*
	

注意:上記の2つのフィルタはstruts 2のフィルタの前に配置する必要があります.