我有一个映射视图,我想在另一个映射中引用它。
映射视图:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Model.TagBE, Model" table="vw_CurrentTag" lazy="true" schema="dbo">
<id name="Id" column="TAG_HISTORY_ID" type="Guid"
unsaved-value="00000000-0000-0000-0000-000000000000">
</id>
<property name="Tag" column="TAG"/>
<property name="TagStatus" column="TAG_STATUS"/>
<property name="Created" column="CREATE_DATE"/>
<many-to-one name="Defect" class="Model.DefectBE, Model" fetch="join"
not-found="ignore" cascade="none" column="DEFECT_ID" />
<many-to-one name="CreatedBy" class="Model.UserBE, Model" lazy="false"
fetch="join" cascade="none" column="CREATE_USER_ID" />
</class>
</hibernate-mapping>
我想在此映射中使用它来获取单个TagBE:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="DefectBE, Model" lazy="true" table="DEFECT" schema="dbo">
<id name="Id" column="DEFECT_ID" type="Guid">
<generator class="assigned" />
</id>
<property name="Sn" column="SERIAL_NUMBER" />
<property name="Description" column="PART_DESCRIPTION" />
<many-to-one name="System" class="Model.SystemBE, Model" fetch="join"
cascade="none" column="SYSTEM_ID" not-found="ignore"/
</class>
</hibernate-mapping>
为了举例,上面的映射已被删除(删除了一堆属性以及与手头问题无关的人与人之间的关系。
以“System”名称显示的多对一按预期工作,它只是另一个映射表,而不是视图。我的问题是,当我尝试映射视图“vw_CurrentTag”时,我只能在我专门使用ISession和ICriteria来获取TagBE类的特定内容时访问数据。
当我尝试在DefectBE映射中使用以下内容时,它只为TagBE提供null:
<many-to-one name="Tag" class="Model.TagBE, Model" fetch="join" cascade="none"
column="DEFECT_ID" not-found="ignore"/>
我也尝试过使用一对一,但是当TagBE对象成为DefectBE对象的一部分时,我总是得到null。
如果不可能,我总是可以使用只有1个条目的袋子。
该视图只是对单个表的查询,以根据其他列返回唯一的Tag列。
答案 0 :(得分:0)
多对一“Tag”使用表DEFECT上的列DEFECT_ID来匹配视图TAG_HISTORY_ID的主键,它永远不会相等。
你可能想要的是在Defect类上的一对一映射,它指向视图上的DEFECT_ID。
<one-to-one name="Tag" class="Model.TagBE, Model" fetch="join" property-ref="Defect" foreign-key="none"/>