我需要将两个不同的类映射到同一视图,并收到存在重复映射的错误。这在NHibernate有可能吗?如果没有,任何人都可以指示我如何解决这个映射问题。
我处理的是一成不变的观点。一个视图返回分成两个类所需的数据。该视图如下所示:
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>
我已经尝试了每个具体的表继承以及两次映射到同一个视图,但没有任何乐趣:(
这是放入一个xml片段的“粗略”映射。注意我还需要映射到一个接口(有效)
<?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 :(得分:1)
使用表单的抽象/子类映射时,似乎无法将多个类映射到单个视图:
<class name="I[Entity]" abstract="true">
<union-subclass name="[Entity]">
...
</union-subclass>
</class>
我最终使用正确运行的proprty-ref属性直接映射到具体类:
<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>
也许“抽象”子映射类型会否定使用union-subclass hack映射到接口。