nhibernate映射,加入没有主键和外键
问题描述:
我有这些遗留表,我通过nhibernate访问,基本的一个实体访问是好的,但我真的需要得到连接工作。nhibernate映射,加入没有主键和外键
理想情况下,我会有主键和外键来定义连接,但因为这些是遗留表,我只有合并id是表的索引,这些索引已用于性能的原因,所以我不能改变。
反正我有JobHeader表和属性表
JobHeader映射看起来像这样的时刻:
<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>
而且房产测绘是这样的:
<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”来保存“参考”属性。
我想创建一个将被称为JobHeaderJoinedProperty 所以或许会是这个样子了新的映射文件:
<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实体将能够与访问属性实体它在这里:
public virtual Property Property
{
get
{
return this.property;
}
set
{
this.property = value;
}
}
通过nhibernate连接两个遗留表不应该太棘手?
我真的只是想复制内部连接在SQL会是这样:
Select * from job_header inner join property on property.reference = job_header.propref
答
是不是一个一对一的映射你是后?
<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)
/>
所以你的情况这将是
<one-to-one
name="Property"
class="ClassName"
property-ref="PropRef"
/>
来源http://www.nhforge.org/doc/nh/en/#mapping-declaration-onetoone