现在我的映射中有第二个代码:
<class name="Order" table="tOrder">
<id name="Id">
<column name="Ref" sql-type="int"/>
<generator class="native"/>
</id>
<property name="OrderNo" column="OrderNo"/>
<property name="CustomerId" column="CustomerId"/>
<join table="tOffer">
<key column="Ref" unique="true"/>
<component name="User" class="User" >
<property name="Id" column="OfferId"/>
<property name="UserName" column="UserName"/>
</component>
<component name="Driver" class="Contact">
<property name="FirstName" column="FirstName"/>
<property name="LastName" column="LastName"/>
<property name="Email" column="DriverEMail"/>
<property name="Fax" column="DriverFax"/>
<property name="Phone" column="DriverTelephone"/>
</component>
</join>
看起来很好(而且它的工作没有问题),有问题。
Driver类的某些字段不正确(FirstName,LastName)。 他们应该从不同的数据库中获取这些字段的数据。从理论上讲,它看起来应该是这样的:
<join table="tDriver">
<key column="Ref" unique="true"/>
<component name="Driver" class="Contact">
<property name="FirstName" column="Firstname"/>
<property name="LastName" column="Lastname"/>
</component>
</join>
但是我无法做到这一点,因为已经在映射中声明了Driver。使用View帮助可以轻松解决此问题,但还有另一个问题,我不应该对数据库进行任何更改(无法创建View)。 据我了解,有可能使用:
<sql-query name="...">...</sql-query>
在里面应该选择来自tOffer的Driver和来自tDriver的另外两个字段的数据。 所以,我的问题是,它应该如何正确看待它会起作用吗?我的意思是,我们是否会遇到其他映射属性的任何问题?
修改
内部应该是我想的,但是如何使用它......
Select d.Firstname, d.Lastname, o.DriverEMail, o.DriverFax , o.DriverTelephone
FROM tOffer as o WITH (nolock)
INNER JOIN tDriver as d WITH (nolock) on d.Ref = o.Ref
P.S对我的英语很抱歉。
答案 0 :(得分:1)
NHibernate支持类似视图的映射。我们可以使用另一种方法 table="tableName"
<subselect>
(定位到表格或视图)
然后映射可能如下所示:
<join table=""> <!-- table="" attribute should be there, even empty-->
<subselect>
Select d.Firstname AS FirstName
, d.Lastname AS LastName
, o.DriverEMail AS Email
, o.DriverFax AS Fax
, o.DriverTelephone AS Phone
, d.Ref AS Ref
FROM tOffer as o WITH (nolock)
INNER JOIN tDriver as d WITH (nolock) on d.Ref = o.Ref
</subselect>
<key column="Ref" unique="true"/>
<component name="Driver" class="Contact">
<!-- NOTE if the name and column do fit... the column def is redundant.. -->
<property name="FirstName" column="FirstName"/>
<property name="LastName" column="LastName"/>
<property name="Email" column="Email"/>
<property name="Fax" column="Fax"/>
<property name="Phone" column="Phone"/>
</component>
...
</join>
不忘记同时返回 REF
列,这将是如何加入两个实体的方式