6

知りたい-例を高く評価します-

Google App Engine for Javaで関係をモデル化する方法は?

-1対多-多
対多

Web全体を検索しましたが、Javaについては何も見つかりませんでした。すべてのガイドとチュートリアルはPythonに関するものです。

この記事から、Pythonでは関係がReferencePropertyを使用してモデル化されていることがわかりました。ただし、Javadocリファレンスでこのクラスについて何も見つかりませんでした。

さらに、この記事では、次のことについて説明しました。

現在、Javaユーザー向けのツールが不足しています。これは主にAppEngine用のJavaプラットフォームが比較的新しいためです。

しかし、それは2009年に書かれました。

最後に、各エンティティの祖先パスを使用して関係をモデル化することになりました。このアプローチには問題があり、アプリのスケーラビリティが制限されていることを後から発見しました。

PythonのReferencePropertyクラスと同等のJavaクラスを教えていただけますか?または、Javaデータストアの低レベルAPIを使用してAppEngineでリレーションシップをモデル化する方法の例を教えてください。

よろしくお願いします。

4

2 に答える 2

4

GAE/J でのエンティティ間の関係の作成は、使用している db API によって異なります。

  1. JDO:エンティティ関係

  2. JPA: docs を参照してください

  3. オブジェクト化:単一値の関係

  4. 低レベル API: あるエンティティのキ​​ーをプロパティとして別のエンティティに追加します: プロパティ タイプ を参照してください

于 2012-06-21T13:40:00.427 に答える
1

ただのヒント。データ モデルを定義するときは、エンド ユーザー クエリの観点から考え、それに応じてデータ モデルを定義します。

たとえば、本を借りる店の例を見てみましょう。従来のアプリケーションでは、次の 3 つの主要なエンティティがあります。

--> 本

--> クライアント

--> Rent (多対多を解決するため)

どのクライアントがどの本を借りているかのレポートを表示するには、Rent テーブル、Book テーブル、および client テーブルを結合するクエリを発行します。

ただし、結合操作がサポートされていないため、GAE では機能しません。

私が見つけた解決策 (おそらく他の解決策) は、同じ 3 つのテーブルを使用してモデル化することですが、本とクライアントの定義を Rent テーブルに埋め込みます。

このように、借りている本のリストを表示することは、非常に高速で安価です。唯一の欠点は、たとえば本のタイトルが変更された場合、すべての埋め込みオブジェクトを調べなければならないことです。ただし、それは読み取り専用クエリと比較してどのくらいの頻度で発生しますか。

要約すると、エンドユーザーのクエリの観点から考えてください

于 2012-06-21T18:29:38.573 に答える