0

次のような関係がある状況があります。

人は 1 つ以上の住所を持っています。顧客は 1 つ以上の住所を持っています。

個人、顧客、住所は別のテーブルです。

@OneToMany 関係でこれを行っていました。フレックスクライアントがクライアントで作成され、DBで作成する必要があるオブジェクトを送信しているため、これは問題を引き起こしています。

クライアントが同じアドレスを参照する個人と顧客を送ってきた場合、2 つのアドレス オブジェクトは同じ Java オブジェクトではない (同じポインターではない) ため、休止状態は 2 つのアドレス オブジェクトを作成します。

これは、サーバーへの送信時に新しいオブジェクトを作成する BlazeDS および Dozer によって引き起こされる問題です。

したがって、関係のない人と顧客オブジェクトのアドレスIDが必要なため、休止状態はオブジェクトを作成しません。しかし、個人オブジェクトを読み取るときに、保存されたアドレス ID に基づいて一時的なアドレス オブジェクトを埋めたいと思います。

これが可能かどうか誰にもわかりますか?

4

1 に答える 1

0

ここには 2 つの問題があります。

  • データの遅延読み込みと
  • エンティティの解決 / クライアント上のエンティティの単一正規インスタンス

役立つフレームワークはありますが、この問題にはまだ優れた普遍的な解決策がありません。

dpHibernateは、データの遅延ロードを支援します - つまり:

個人オブジェクトを読み取るときに、保存されているアドレス ID に基づいて一時的なアドレス オブジェクトを埋めたいと考えています。

残念ながら、エンティティの解決は、dpHibernate の複数の呼び出しでまだサポートされていません。つまり、呼び出しがサーバー呼び出し内の 2 つの場所で同じオブジェクトを返す場合 (たとえば、両方で同じAddressエンティティが返された場合、両方の顧客オブジェクトで単一のインスタンスを受け取ります。Customer id:1Customer id:2Address

ただし、データが個別の呼び出しで読み込まれる場合は、 の 2 つのインスタンスを受け取りますAddress。これは、v3 での実装が予定されている問題です。

Cairngorm Integration ライブラリがこの問題に対処しようとしていると思いますが、wiki では LCDS のみであると示唆しています。これを BlazeDS で実装するために何が必要かを調べることができます。私はこのライブラリを使用したことがないので、あなたの問題をどれだけうまく解決できるかについて話すことはできません.

于 2011-04-12T15:17:39.490 に答える