首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nhibernate映射,不带主键和外键的连接

nhibernate映射,不带主键和外键的连接
EN

Stack Overflow用户
提问于 2010-02-12 19:47:08
回答 1查看 2.3K关注 0票数 3

我有这些通过nhibernate访问的遗留表,基本的一个实体访问是很好的,但我真的需要让joins工作。

理想情况下,我应该使用主键和外键来定义连接,但是由于这些是旧表,所以我只有复合i,这些i是表的索引,这些索引用于性能原因,所以我不能更改。

不管怎样,我有JobHeader表和属性表

JobHeader映射目前看起来像这样:

代码语言:javascript
复制
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="JobHeader " dynamic-update="true" table="JOB_HEADER">
    <composite-id>
      <key-property name="Company" column="JBH_COMPANY" type="String(6)" />
      <key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" />
      <key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" />
      <key-property name="Status" column="JBH_STATUS" type="String(10)" />
    </composite-id>
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
    <property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" />
  </class>
</hibernate-mapping>

属性映射如下所示:

代码语言:javascript
复制
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Property" dynamic-update="true" table="PROPERTY">
    <composite-id>
      <key-property name="Company" column="PRP_COMPANY" type="String(6)" />
      <key-property name="Reference" column="PRP_REFERENCE" type="String(20)" />
    </composite-id>
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
    <property name="Name" column="PRP_NAME" type="String(40)" not-null="false" />
  </class>
</hibernate-mapping>

在Jobheader中,它使用“PropRef”来保存属性“Reference”。

我想创建一个名为JobHeaderJoinedProperty的新映射文件,因此可能如下所示:

代码语言:javascript
复制
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="JobHeaderJoinProperty" dynamic-update="true" table="JOB_HEADER">
    <composite-id>
      <key-property name="Company" column="JBH_COMPANY" type="String(6)" />
      <key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" />
      <key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" />
      <key-property name="Status" column="JBH_STATUS" type="String(10)" />
    </composite-id>
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
    <property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" />  </class>
    <bag name="Property" fetch="join" >
      <key column="Reference" property-ref="PropRef" />
      <one-to-one class="Property"/>
    </bag>
  </class>
</hibernate-mapping>

然后希望我的JobHeaderJoinedProperty实体能够访问包含以下内容的属性实体:

代码语言:javascript
复制
public virtual Property Property
        {
          get
          {
            return this.property;
          }
          set
          {
            this.property = value;
          }
        }

通过nhibernate连接两个遗留表应该不会太麻烦,对吧?!

我真的只想复制一个内部连接,其中sql将如下所示:

代码语言:javascript
复制
Select * from job_header inner join property on property.reference = job_header.propref
EN

回答 1

Stack Overflow用户

发布于 2012-08-28 10:23:20

一对一的映射不就是你想要的吗?

代码语言:javascript
复制
<one-to-one
        name="PropertyName"                                (1)
        class="Property"                                  (2)
        cascade="all|none|save-update|delete"              (3)
        constrained="true|false"                           (4)
        fetch="join|select"                                (5)
        property-ref="PropertyNameFromAssociatedClass"     (6)
        access="field|property|nosetter|ClassName"         (7)
/>

所以在你的情况下,它将是

代码语言:javascript
复制
<one-to-one
        name="Property"                              
        class="ClassName"                                 
        property-ref="PropRef"  
/>

http://www.nhforge.org/doc/nh/en/#mapping-declaration-onetoone

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2251520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档