我有两张表,例如:
FirstTable(firstID, field1), SecondTable(secondID, firstID, field2)
我有一个xml映射:
<class name="testClass"
table="SecondTable"
lazy="false">
<id name="ID" column="secondID" type="Guid">
<generator class="guid"/>
</id>
<property name="Field2" column="field2" type="string"/>
<join table="FirstTable">
<key column="firstID"/>
<property name="Field1" column="field1"/>
</join>
</class>
问题是因此我希望得到如下查询:
select * from SecondTable st
inner join FirstTable ft on st.firstID = ft.firstID
但现在查询看起来像
select * from SecondTable st
inner join FirstTable ft on st.secondID = ft.firstID
是否可以不加入主要领域?
答案 0 :(得分:1)
理想情况下,您应该尊重相关字段,例如&#34; keys&#34;获取您的相关数据。 但您可以按任何字段连接表,因为它们具有相同的值类型。
另外,您可以了解如何加入&#39;看到以下基本链接的工作。 https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg
如果seconId是指向firstTable上的firstId列的FK,那么你的代码也是正确的,而且secondId也可能是PK,所以你可以从secondTable中删除firstId列,但这将是最好的实践。见这 - https://ayende.com/blog/3961/nhibernate-mapping-join
所以代码应该是这样的,你的SecondTable应该有一个属性指向firstID,而另一个类是相关的。我无法在这里测试,我在工作。
<class name="SecondTable"
table="SecondTable"
lazy="false">
<id name="secondID" type="Guid">
<generator class="guid"/>
</id>
<property name="secondID" type="Guid" />
<property name="field2" type="string"/>
<many-to-one name="firstID" column="firstID"/>
</class>
<class name="FirstTable">
<id name="firstID" type="guid">
<generator class="guid" />
</id>
<property name="Field1" type="String" />
</class>