Spring 3 +JPA2.0アプリケーションがあります。私の@Controller
場合、初期化されたオブジェクトが必要ですが、プロキシがあり、プログラムで初期化できる必要があります。と同様の機能が必要ですorg.hibernate.Hibernate.initialize(Object)
。
誰かが助けることができますか。オブジェクトはAJAX操作に使用されます。プロパティがプロキシの場合、JSONとして送信できません
Spring 3 +JPA2.0アプリケーションがあります。私の@Controller
場合、初期化されたオブジェクトが必要ですが、プロキシがあり、プログラムで初期化できる必要があります。と同様の機能が必要ですorg.hibernate.Hibernate.initialize(Object)
。
誰かが助けることができますか。オブジェクトはAJAX操作に使用されます。プロパティがプロキシの場合、JSONとして送信できません
私の知る限り、JPAオプションはありません。を使用する必要がありますHibernate.initialize(..)
。
実際、Hibernateの実装を調べたところ、多くの場合、レイジーコレクションは予期しない形で初期化されているように見えます。のようentityManager.contains(..)
にPersistence.getPersistenceUtil().isLoaded(...)
。これらを試してみてください。ただし、そのような実装の詳細に依存するべきではないと思います。
アプリケーションでも同様のことを行っており、データベースエンティティオブジェクトを分割して、JSON出力用に別のクラスを用意すると便利であることがわかりました。
オブジェクトを検査し、オブジェクトのすべてのプロパティに対してJSONを取得するだけの、JSONフレームワークを使用している場合は、次のようなオブジェクトを使用できます。
PersonEntity-JPAおよびPersonJsonOutputによって管理されるクラス-JSON出力用に特別に設計されたクラス
長期的にはより安全かもしれません。これにより、JSONサービスに自動的に反映されないデータベースの変更を行うことができます。データベースエンティティが変更されたらすぐに古いバージョンを壊すのではなく、JSONサービスをバージョン管理することをお勧めします。
また、たとえば日付形式やデータベース内の数値をJSON内の文字列にするなどの観点からJSON出力をより細かく制御できます...
この答えは、実際にはJSONの生成方法によって異なりますが、ライブラリが内省を行っているようです。
遅れて答えが受け入れられることはわかっていますが、別の標準的なJPAの方法は、DAOからオブジェクトを返す前に、初期化するリストのsize()メソッドを呼び出すことです。
Object.getList().size();
これにより、初期化に実装固有のメカニズムをごまかして使用する必要がなくなります。