2009-07-01 4 views
0

私は比較的新しい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)、および値(任意の文字列)です。

具体的な質問:

  1. 私は(例えば項目とカテゴリーが異なるテーブルを持っている)私の既存のテーブル構造を維持したいならば、どのように私は、プロパティのタイプを決定するためのid_context弁別を使用することをHibernateに教えていますか? Item/Category/PropertyTypeを共通の祖先のサブクラスにしなければならないので、Propertyオブジェクトが特定のPropertyTypeに関連付けられている場合、ItemまたはCategoryを含むリストを返すことができますか?

  2. 私は休止状態をまったく使用すべきですか?私は、私が欲しいことをするためにSQLクエリを作成する方法を知っています、私はちょうどHibernateを囲む方法について考えるのに困っています。

  3. 私が望むクエリを実行するためにHibernateを微調整するにはどうすればよいですか?例えば(ID_context = 2)に適用されるPropertyTypeが258のPropertyレコードを返すだけであれば、SQL(SELECT * FROM Property = 258 AND id_context = 2)でそれを行う方法を知っていますが、そうではありませんHibernateでそれを行う方法を確かめてください。

+0

があります :Hibernateはそれが有益である可能性が提供して多数の機能があります。 HibernateのXMLマッピングファイルやアノテーションを使用する予定ですか? –

+0

はアノテーションを優先しますが、XMLを考慮します。 –

答えて

1

外部キー参照で必要なものと外部キー側のディスクリミネータ列は、現在、hibernateではサポートされていません。真のHibernate-aholicは、外的なキー制約を定義することができないため、どちらも健全な関係モデルではないと主張するでしょう。

Hibernateでモデル化するには、3つのエンティティタイプをすべてマージするか、Item/Category(統一される)を参照するものと、PropertyTypeを参照するものの2つの別々のカラムが必要です。 2つの分離されたサブクラス。

基本的に、DBセットアップ全体をHibernateに合わせて変更する必要があります。

「透明」ORM以外のHibernateに移動する理由があります。私はあなたのアプリケーションのどこかでHibernateがそれに合っているかどうかを判断する必要があると思います:あなたはどんな問題に直面していますか?あなたはHibernateで何を解決したいですか?遅延ロード - - 後期の書き込み(TXがコミットしたときにのみ、DBへの書き込み) - 1番目と2番目のレベルのキャッシュ - ...

乾杯

関連する問題