休止状態のエンティティを ehcache に保存しています。エンティティを取得するためにファサード レイヤーが呼び出されると、インターセプターがそのメソッドを呼び出してキャッシュします。次に同じメソッドが呼び出されると、キャッシュからエンティティが返されます。これはすべてうまくいきます。
私のエンティティには、FetchType.Lazy として定義されているいくつかのプロパティ (オブジェクトまたは関連付けられたエンティティ) があります。このようなもの、
@JoinColumn(name = "inventory_item_oid", referencedColumnName = "inventory_item_oid")
@ManyToOne(fetch = FetchType.LAZY)
private InventoryItem inventoryItem;
したがって、すべてのプロパティが読み込まれるわけではありません。インベントリ アイテムが必要な場合に呼び出されます。この呼び出しは、LazyInitialization 例外をスローしています。
キャッシュされた値は 1 日有効であるため、有効期限が切れる前に何度でも呼び出すことができます。
上記の例外をスローするこれらの呼び出しの 1 つ。
長い休止状態セッションを使用すると、この問題を解決できることがわかりました。しかし、私のものはリクエスト/レスポンスベースのアプリケーションであるため、機能しません。
プロパティにアクセスする前に InventoryItem が null かどうかを確認する必要があるもう 1 つの方法があります。null の場合は、その値を個別に取得して親にアタッチする必要があります。これは良いように思えます...しかし、私は多くのエンティティを持っているので、多くの作業が必要です.
レイジーとして定義されたオブジェクトを取得できる他の方法があるかどうかを知りたいです。