私は比較的新しいHibernateで、比較的シンプルな既存のデータベースをHibernateで使用できるものに移行しようとしています。アプリケーションの構造化に関するアドバイスを探しています。Hibernate多相でのクエリ
は、私は3つのエンティティの種類があります。
- 項目
- カテゴリー
- PropertyTypeは
項目とカテゴリとPropertyTypeはすべて似ていますが、彼らは両方の名前、説明、作成日などを持っているが、それらはそれぞれ、追加の個別の機能があります。
- 項目では、カテゴリ項目および/またはカテゴリのセットが含まれている具体的な場所(URL)
- を持っていますカテゴリとアイテムの間の多対多の関連付け、および親カテゴリから子カテゴリへの隣接リストです。
- PropertyTypeはは、今私は、アイテムとカテゴリは、別々のテーブルで定義されているアイテム、カテゴリー、または他のPropertyTypes
に関連付けられているキー/値フィールドのプロパティテーブルで使用するためのメタデータのキーであります私はItemとCategoryがサブクラスである抽象Nodeエンティティクラスを作ることが賢明かどうかと思っています。 PropertyTypeは、おそらく独自のテーブルに存在するはずです。 (私は、PropertyTypeが別のPropertyTypeに適用されているPropertyに対して3つのエントリしか持たず、PropertyTypeが常にNodeに適用されるように、物事を簡単にする場合は取り除くかもしれません)。
現在、私のPropertyテーブルには、PropertyTypeId、ID(プロパティが適用されるItem、Category、PropertyTypeのID)、id_context(前のフィールドの識別子:0 = Item、1 = Category、2 = PropertyType)、および値(任意の文字列)です。
具体的な質問:
私は(例えば項目とカテゴリーが異なるテーブルを持っている)私の既存のテーブル構造を維持したいならば、どのように私は、プロパティのタイプを決定するためのid_context弁別を使用することをHibernateに教えていますか? Item/Category/PropertyTypeを共通の祖先のサブクラスにしなければならないので、Propertyオブジェクトが特定のPropertyTypeに関連付けられている場合、ItemまたはCategoryを含むリストを返すことができますか?
私は休止状態をまったく使用すべきですか?私は、私が欲しいことをするためにSQLクエリを作成する方法を知っています、私はちょうどHibernateを囲む方法について考えるのに困っています。
私が望むクエリを実行するためにHibernateを微調整するにはどうすればよいですか?例えば(ID_context = 2)に適用されるPropertyTypeが258のPropertyレコードを返すだけであれば、SQL(SELECT * FROM Property = 258 AND id_context = 2)でそれを行う方法を知っていますが、そうではありませんHibernateでそれを行う方法を確かめてください。
があります :Hibernateはそれが有益である可能性が提供して多数の機能があります。 HibernateのXMLマッピングファイルやアノテーションを使用する予定ですか? –
はアノテーションを優先しますが、XMLを考慮します。 –