JAX-RS を使用してオブジェクトを XML として公開しようとしています。
というクラスがClient
あり、そのインスタンスを次のように返しています。
@Transactional(readOnly=true)
@GET
@Produces("application/xml")
@Path("/{clientId}.xml")
public Client getCleintAsXML(@PathParam("clientId") int clientId) {
Client c = em.find(Client.class, clientId);
return c;
}
ただし、Client
オブジェクトにはオブジェクトのリストがありGroup
、Group
オブジェクトには他のオブジェクトのリストがあります。
JAX-RS がオブジェクトをシリアライズしようとClient
すると、オブジェクト グラフ全体が走査されます。groups
レイジーローディングはトランザクション内でのみ機能するため、Hibernate プロキシに遭遇するとコードが壊れます。
十分に公平なのでgroups
、トランザクションを終了する前に熱心にロードします。
Group
しかし、各オブジェクトが 1 対多の関係、つまりさらにプロキシされたリストを持つため、それでも失敗します。
出力にそれらを必要としません。これらのプロキシが削除された場合、つまりnullに設定された場合、私の問題は解決されることを認識しています。
これはエラーが発生しやすく、保守できないため、手動で null に設定したくありません。これを自動的に行う方法はありますか?
または、この特定のクエリにプロキシを使用しないように hibernate に指示できますか? または、1 レベルの深さのプロキシのみを使用しますか?
JPAの背後でHibernateを使用しています。可能な限り、Hibernate への直接の参照は望んでいません。
プロキシを取り除くために、さまざまなユーザーによって作成された多数のクラスが見つかりました。これを行う標準的な方法はありますか?これが非常に一般的な問題である場合、標準的な解決策があると思います。