2009-03-03 4 views
0

現在のプロジェクトでは、hibernateを使用して従来のデータベースをマップする必要がありますが、いくつかの問題が発生しています。 データベースは、すべてのドメインオブジェクトの共通のプロパティを含む1つの 'エンティティ'テーブルを使用して設定されます。プロパティには、作成日、所有者(ユーザー)、およびその後にドメインオブジェクトのテーブルで使用される主キーなどが含まれます。hibernateを使用した従来のマッピング

コンテキストの簡単な表現は、このような通りです:私は、アカウントに属するすべての連絡先を含む、自分のアカウントへのマッピングコレクション・マッピングを追加しようとすると、

table entity 
- int id 
- varchar owner 

table account 
- int accountid (references entity.id) 

table contact 
- int contactid (references entity.id) 
- int accountid (references account.accountid) 

私の問題は、それ自体を示します。私の試みは、以下に煮詰める:

<hibernate-mapping> 
    <class name="Contact" table="entity"> 
     <id name="id" column="id"> 
      <generator class="native" /> 
     </id> 
     <join table="contact"> 
      <key column="contactid"/> 
      <!-- more stuff --> 
     </join> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping> 
    <class name="Account" table="entity"> 
     <id name="id" column="id"> 
      <generator class="native" /> 
     </id> 


     <bag name="contacts" table="contact"> 
      <key column="accountid" /> 
      <one-to-many class="Contact"/> 
     </bag> 

     <join table="account"> 
      <key column="accountid"/> 
      <!-- more stuff --> 
     </join> 

    </class> 
</hibernate-mapping> 

をしかし、私は、エンティティテーブルがアカウントIDという列が含まれていないことを示す、SQLエラーを取得し、アカウントを取得しようとします。なぜこれが起こっているのか分かります。マッピングは、連絡先テーブルを調べたいときに、エンティティテーブルのaccountid列を見つけようとします。私はここで何かを見逃しているのでしょうか、あるいは別の方向からこの問題にアプローチすべきですか?

答えて

3

これは、テーブルごとのサブクラスのパラダイムを使用して、実際に継承をマッピングする必要があるように見えます。

このような何か:

<class name="entity" table="entity"> 
    <id name="id" column="id"> 
     ... 
    </id> 

    <joined-subclass name="contact" table="contact"> 
     <key column="contactid"/> 
    </joined-subclass> 

    <joined-subclass name="account" table="account"> 
     <key column="accountid"/> 
    </joined-subclass> 
</class> 

方法によっておおよそのだ - それはHibernateのドキュメントのセクション9.1.2で詳しく説明しています(念のためにあなたがそれを見つけることができない、それは「表あたりと呼ばれていますサブクラス ")。

乾杯

リッチ

+0

継承一部のフルACK。 – boutta

+0

私はこの答えを受け入れる傾向があります。しかし、私は最初にもっと多くの返事を待っています。私は答えを受け入れてから受け入れを拒否することは嫌です。少なくとも+1 ;-) –

関連する問題