nHibernate中的关系使用简单的列,而不是PK

时间:2010-07-05 08:25:44

标签: nhibernate mapping

我有一个包含这些列的表T1:

  • ID(int) - 是主键
  • Ref(int) - (not null)
  • 姓名(字符串)

带有列的第二个表T2:

  • T2ID(int) - 是主键
  • Value1(int)
  • Value2(int)
  • SomeOtherData(int)

来自T1的每条记录在T2中都有> 2条记录:T1中的参考列具有来自T2表,T2ID列的值。

如何为此方案编写映射文件? 目前我用这个:

<class name="Class1" table="T1" >
    <id name="ID" column="ID">
        <generator class="increment"/>
    </id>
    <property name="Name"/>

        <set name="Data" inverse="true" fetch="select">
            <key>
                <column name="T2ID"/>
            </key>
            <one-to-many class="Class2"/>
        </set>
</class>

<class name="Class2" table="T2" >
    <id name="ID" column="T2ID">
        <generator class="increment"/>
    </id>
    <property name="Value1"/>
    <property name="Value2"/>
    <property name="SomeOtherData"/>
</class>
代码中的

我有这个加载T1的T2数据:

NHibernateUtil.Initialize( class1.Data );

哪个生成此SQL:

SELECT 
T2ID, Value1, Value2, SomeOtherData
FROM T2
WHERE T2ID = <**an ID column from T1 for which I'm loading T2 data!**>

问题是如何告诉nHibernate使用Ref列中的值来加载Data属性,而不是PK?

干杯, 亚历

1 个答案:

答案 0 :(得分:1)

据我所知,这不受支持。 property-ref元素允许您从“多”方面映射此类关系,但没有相应的映射“一”方。

解决方法是为T1创建一个包含T2ID的视图,并映射而不是表格。