JPAの遅延ロード

自分はJPAのEntityの関連付け設定を全て遅延ロードで設定しています。EntityをVew層でも使っています。ただし、Open Session in Viewは使っていません。レイヤ層に対して役割をはっきり持たせるのは当然だと思うので、データアクセスはサービス層から呼ばれるDaoやEntityMangerに集中すべきではないかと思っています。
で、データ取得は基本的にFETCH JOINを使うようにしています。遅延ロードは「ロードを遅らせる」為に指定してるのではなく、「必要ない関連Entityをロードしない」為に定義しています。この方法だとEntityManagerのfindメソッドが使えないというデメリットがありますが、そもそもfindメソッドは主キーで一つのEntityを取得するときしか使えないし、関連付けのロード設定もデフォルトの動きしか選択できません。findメソッドを使う場合、LAZYロードするかしないかは、Entityのデフォルト設定に依存してしまいます。だったら、基本的にQueryで取得すればいいじゃないか、というのが自分の考えです。
EntityをVIEW層で使っている理由は、アプリケーショントランザクションをEntityManagerのmerge機能を使って実現しているので、Entity単位で考えた方が楽だからです。Hibernate in Actionでも、Open Session in Viewよりも分離オブジェクトのupdateによる処理の方を推奨していた気がするのですが・・・
EntityをView層で使う方法の問題点は、FETCH JOIN指定していない関連をLAZYロードで呼び出そうとするとエラーになるのを防げないということでしょうか。それを防ぐ必要がある場合は、やはりEntityを変換すべきだと思います。ただ・・・気になるのは、その場合、更新するときには新たにEntityを作り直すべき? そのときに、ロードする必要の無い関連オブジェクトはgetReferenceで取得する? 更に、ロードしていないCollectionの関連はどうしたらいいんだろう?・・・関連定義が沢山あって、その殆どを利用しない場合は?・・・関連オブジェクトをセットしていないと、外部キーがnullになったと判定されてしまうような気がするし・・・DTOにEntityを渡して委譲で処理すれば楽なんですけど、それって本来の趣旨からずれてるんだろうし・・・
いや、EntityをVIEW層で使うこと自体が悪と書かれていることが多いので、対処を考えてはいるのですが、正直どうしたらいいかよくわからないんですよね。だから簡単な方法を選択してしまっています。