2009-07-22 15 views
2

2つの異なるクラスを同じビューにマップし、重複したマッピングが存在するというエラーを受け取る必要があります。これはNHibernateで可能ですか?そうでない場合は、どのように私はこのマッピングの問題を解決することができるかについて指示を与えることができます。NHibernate:複数のクラスを同じビューにマッピングする

石で設定されたビューで作業します。 1つのビューは、2つのクラスに分割するために必要なデータを戻します。以下のようなビューが見えます:クラスはゲームのリストで、「プレーヤー」である必要があり

vw_player_points 
---------------- 
Id 
GameID 
PlayerID 
Points 

select gameid from vw_player_points where playerid = <PlayerID> 

を果たし、各「ゲーム」はプレイヤーとそのポイントのリストを必要とします。

select playerid, points from vw_player_points where gameid = <GameID> 

私はテーブルごとの具体的なクラスの継承が二度同じビューにマッピングとしてaswell試してみたが、何の喜びを持っていない:(

1つのxmlスニペットに入れた '粗い'マッピングを以下に示します。

<class name="I[Entity]" abstract="true"> 

    <union-subclass name="[Entity]"> 
     ... 
    </union-subclass> 

</class> 

:私もそれは形の抽象/サブクラスのマッピングを使用する場合、単一のビューに複数のクラスをマッピングすることは不可能と思われる

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="Test"> 

    <class name="IPlayer" abstract="true"> 

    <id name="Id" column="id"> 
     <generator class="assigned"/> 
    </id> 

    <union-subclass name="Player" table="vw_player"> 
     <bag name="Games"> 
      <key column="player_id"/> 
      <one-to-many class="Test.IGame" not-found="ignore"/> 
     </bag> 
    </union-subclass> 

    </class> 

    <class name="IGame" abstract="true"> 

    <id name="Id" column="game_id"> 
     <generator class="assigned"/> 
    </id> 

    <union-subclass name="Game" table="vw_player_points"> 
     <bag name="Points"> 
      <key column="game_id"/> 
      <one-to-many class="Test.IPlayerPoints" not-found="ignore"/> 
     </bag> 
    </union-subclass> 

    </class> 

    <class name="IPlayerPoints" abstract="true"> 

    <id name="Id" column="id"> 
     <generator class="assigned"/> 
    </id> 

    <union-subclass name="PlayerPoints" table="vw_player_points"> 
     <property not-null="false" name="PlayerId" column="player_id"/> 
     <property not-null="false" name="Points" column="points"/> 
    </union-subclass> 

    </class> 

</hibernate-mapping> 
+0

各クラスのマッピングを投稿できますか? –

+0

マッピングが投稿されました:) – theGecko

+0

これに関するアイデアですか? – theGecko

答えて

1

(作品)インタフェースにマッピングする必要があります注意してくださいおそらく、「抽象的な」サブマッピングタイプはユニオン・サブクラスハックmの使用を否定するでしょう

<class name="Game" table="vw_player_points"> 

    <id name="Id" column="id"> 
     <generator class="hilo"/> 
    </id> 

    <property not-null="false" name="GameId" column="gameid"/> 

    <bag name="Points"> 
     <key column="gameid" property-ref="GameId"/> 
     <one-to-many class="PlayerPoints" not-found="ignore"/> 
    </bag> 

</class> 

<class name="PlayerPoints" table="vw_player_points"> 

    <id name="Id" column="id"> 
     <generator class="hilo"/> 
    </id> 

    <property not-null="false" name="PlayerId" column="playerid"/> 
    <property not-null="false" name="Points" column="points"/> 

</class> 

:私は正しく動作proprty-REF属性を使用して、具体的なクラスに直接マッピングしてしまいましたインターフェイスに付ける。

+0

それは明らかです!良いですね! –

+0

申し訳ありませんが、バッグ内のではありませんか? – wenqiang

関連する問題