8

Spring 3 +JPA2.0アプリケーションがあります。私の@Controller場合、初期化されたオブジェクトが必要ですが、プロキシがあり、プログラムで初期化できる必要があります。と同様の機能が必要ですorg.hibernate.Hibernate.initialize(Object)

誰かが助けることができますか。オブジェクトはAJAX操作に使用されます。プロパティがプロキシの場合、JSONとして送信できません

4

3 に答える 3

4

私の知る限り、JPAオプションはありません。を使用する必要がありますHibernate.initialize(..)

実際、Hibernateの実装を調べたところ、多くの場合、レイジーコレクションは予期しない形で初期化されているように見えます。のようentityManager.contains(..)Persistence.getPersistenceUtil().isLoaded(...)。これらを試してみてください。ただし、そのような実装の詳細に依存するべきではないと思います。

于 2011-01-13T13:28:21.433 に答える
1

アプリケーションでも同様のことを行っており、データベースエンティティオブジェクトを分割して、JSON出力用に別のクラスを用意すると便利であることがわかりました。

オブジェクトを検査し、オブジェクトのすべてのプロパティに対してJSONを取得するだけの、JSONフレームワークを使用している場合は、次のようなオブジェクトを使用できます。

PersonEntity-JPAおよびPersonJsonOutputによって管理されるクラス-JSON出力用に特別に設計されたクラス

長期的にはより安全かもしれません。これにより、JSONサービスに自動的に反映されないデータベースの変更を行うことができます。データベースエンティティが変更されたらすぐに古いバージョンを壊すのではなく、JSONサービスをバージョン管理することをお勧めします。

また、たとえば日付形式やデータベース内の数値をJSON内の文字列にするなどの観点からJSON出力をより細かく制御できます...

この答えは、実際にはJSONの生成方法によって異なりますが、ライブラリが内省を行っているようです。

于 2011-01-24T22:31:32.527 に答える
0

遅れて答えが受け入れられることはわかっていますが、別の標準的なJPAの方法は、DAOからオブジェクトを返す前に、初期化するリストのsize()メソッドを呼び出すことです。

Object.getList().size(); 

これにより、初期化に実装固有のメカニズムをごまかして使用する必要がなくなります。

于 2015-06-29T13:08:56.707 に答える