2013-01-03 16 views
6

私はRESTfulなリソースとしてドメインモデルを公開する簡単なwebappを開発しています。 SpringMVC RESTをサポートするJPA2(Hibernate)を使用する予定です。DTOなしでRESTfulなリソースとしてHibernateエンティティを公開する方法はありますか?

エンティティは、それは怠惰な子団体のためのLazyLoadingExceptionをスローします切り離されている場合、XML/JSONにHibernateのエンティティを整列化しているとき。エンティティが依然としてHibernate Sessionにアタッチされていると、データベース全体がほぼロードされます。

私は、プロパティはNULLを返し、その後ロードされていない怠け者にHibernateのコレクションであるかどうかを判断するためにドーザーCustomFieldMapperを使用して試してみました。

しかし、我々は双方向の関連を持っている場合は、熱心に多くのツーワン側をロードし、ドーザはStackOverflowのエラーを結果として無限ループになってしまいますプロパティをコピーしようとします。休止状態これを解決するために、私が知っているその周り

唯一の仕事はのDTOを使用し、唯一のクリーンのPOJO(のDTO)に必要なプロパティをコピーしてXML/JSONにマーシャリングされます。しかし複雑なドメインモデルでは、プロパティを手動でコピーするのは非常に苦痛です。

は(UN)マーシャルHibernateのエンティティに、他のクリーン/シンプルな方法はありますか?

答えて

3

私はGWTアプリケーションでHibernate'd VOを前後に渡すことに似た問題を抱えていましたが、一部のプロジェクトではDozerを有効に使っていましたが、他のプロジェクトではthis articleマーシャリングする前に

お役に立てば幸い、

+0

細かい作業、資料に記載のコードを使用します。しかし、さまざまな種類の関係マッピングをテストする必要があります。ありがとうございました。 –

4

私はあまりにも保守的に聞こえるかもしれないが、私はまだ良いアイデアをのDTOを使用することを検討してください。

あなたのマッピングの複雑さは、他の言葉で、粗く、より複雑なあなたのリソースのAPIの細かさに比例しています。

+2

注意して使用すると、DTOは正常に動作します。私はエンティティよりも豊かなモデルを提供したいと思っています。しばしば、異なるエンティティを、特にウェブレイヤーとのやりとりが容易な、よりコンパクトなモデルにまとめています。 – Gimby

+2

私はギムビーに同意します。時には、複数のエンティティの集合体となる可能性のあるUIに表示されるデータを表現するためにDTOを使用する必要があります。 –

2

は、このクラスで戦利品を取る:https://github.com/viniciuspires/reqlist/blob/master/src/main/java/org/reqlist/arch/HibernateAwareObjectMapper.java

私はJSONシリアライザ/デシリアライザとしてジャクソンを使用している、と私はHibernate.isInitialized場合、このクラスを作成し、それを検証するためHibernate4Moduleを追加する必要がありましたし、accidentalyありませんプロパティを初期化します。私にとっては魅力のように働いた

https://github.com/viniciuspires/reqlist/blob/master/src/main/resources/META-INF/org.reqlist.context.xml#L21

:あなたは自分のObjectMapperとしてそれを設定する必要があり、私はこのラインで行ったように、MessageConverters配列に渡すその後

関連する問題