0

我有一个映射视图,我想在另一个映射中引用它。

映射视图:

<?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>

为了举例,上面的映射已经被删减了(删除了一堆与手头的问题无关的属性和一对一的关系。

以“系统”名称显示的多对一按预期工作,它只是另一个映射表,而不是视图。我的问题是,当我尝试映射视图“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 对象的一部分时,我总是得到空值。

如果不可能,我总是可以使用只有 1 个条目的包。

该视图只是对单个表的查询,以基于其他列返回唯一的 Tag 列。

4

1 回答 1

0

多对一“标签”使用表 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"/>

于 2012-10-18T11:16:32.590 回答