ドメイン モデルを RESTful リソースとして公開する単純な webapp を開発しています。SpringMVC REST サポートで JPA2(Hibernate) を使用する予定です。
Hibernate エンティティを XML/JSON にマーシャリングしているときに、エンティティがデタッチされると、遅延子関連付けに対して LazyLoadingException がスローされます。エンティティがまだ Hibernate セッションにアタッチされている場合、ほぼデータベース全体がロードされます。
Dozer CustomFieldMapper を使用して、プロパティがロードされていない怠惰な Hibernate Collection であるかどうかを判断してから、NULL を返してみました。
しかし、双方向の関連付けがある場合、Hibernate は多対1の側を積極的にロードし、Dozer はプロパティをコピーしようとしますが、これが無限ループに陥り、StackOverflow エラーが発生します。
これを解決するために私が知っている唯一の回避策は、DTO を使用し、必要なプロパティをクリーンな POJO (DTO) にのみコピーしてから XML/JSON にマーシャリングすることです。しかし、複雑なドメイン モデルでプロパティを手動でコピーするのは非常に面倒です。
Hibernate エンティティを (非) マーシャリングする他のクリーンで簡単な方法はありますか?