2

GAE Java を使用して Web アプリを構築しています。(appengine によって生成された) Long ID を主キーとして使用するクラスがあります。

この元のクラス (1 対多の関係) の親クラスとなる新しいクラスを作成したいと考えていますが、子には、現在のロング ID ではなく、タイプ「キー」の主キーが必要です。

主キーを既存の永続エンティティの long ではなくタイプ "key" に変更する最良の方法は何ですか? タイプ「キー」の主キーを持つ新しいクラスを作成し、古いオブジェクトからフィールド値をコピーする新しいオブジェクトをインスタンス化して永続化する必要がありますか? または、どうにかして既存のクラスを更新できますか?

ありがとう

4

2 に答える 2

3

実際、永続化されたエンティティのキ​​ーは不変であると見なされます。キー変更することは、間違いなく、使用されているインスタンスを変更することと同じです。私がお勧めするのは、最初のオブジェクトを作成した親の子にリンクすることです。

于 2010-02-17T14:08:53.747 に答える
0

既存のロング ID を親クラスのリストに格納できます。これにより、必要な 1 対多の親子関係が作成されます。

ただし、一貫性を自分で管理する必要があり (サイトのトラフィックがそれほど多くない場合はそれほど難しくないかもしれません)、親クラスと子クラスは同じエンティティ グループに属しません (トランザクションへの影響)。

キーを変更すると、エンティティ自体 (およびそのエンティティ グループ) が変更されます。

最終的に、適切な解決策は、問題の詳細によって異なります。たとえば、すでに多くの既存のデータがありますか? これはライブ アプリケーションですか (つまり、既に使用されていますか)?

別の解決策として、アプリを別の (より適切な) データ モデルに移行し、アカウントごとに (短時間アカウントをロックアウトして) 移行することもできます。このようにして、アプリ全体がダウンするのではなく、少数の個人のみが変更の影響を受けます (アカウントを移行しているときにアプリにアクセスした場合)。

于 2010-03-29T14:28:08.327 に答える