0
是否可以进行左连接,但是使用hql按右列中的列进行排序?Nhibernate,HQL由右表列左加入订单
例如,我们的领域有这些类:
public class SomeDocument
{
public virtual int Id { get; set; }
public virtual DocumentPart Part1 { get; set; }
public virtual DocumentPart Part2 { get; set; }
}
public class DocumentPart
{
public virtual int Id { get; set; }
public virtual string Content { get; set; }
}
第一部分及第二和性能可为空。
SQL:
create table SomeDocument
(
Id number(*, 0) not null,
DocumentPart1_ID NUMBER,
DocumentPart2_ID NUMBER
);
create table DocumentPart
(
Id number(*, 0) not null,
Content nvarchar2(250) not null
);
映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Testapp.domain" namespace="Testapp.domain.model">
<class name='SomeDocument' table='SomeDocument' lazy="false">
<many-to-one name='Part1' class="Testapp.domain.model.DocumentPart, Testapp.domain" lazy="false" column='DocumentPart1_ID' cascade="save-update" />
<many-to-one name='Part1' class="Testapp.domain.model.DocumentPart, Testapp.domain" lazy="false" column='DocumentPart2_ID' cascade="save-update" />
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Testapp.domain" namespace="Testapp.domain.model">
<class name='DocumentPart' table='DocumentPart' lazy="false">
<property name='Content' column='Content' not-null="true"/>
</class>
</hibernate-mapping>
,现在如果我尝试订购SomeDocuments
由Part1.Content
:
UnitOfWork.CurrentSession
.CreateQuery("from SomeDocument doc order by doc.Part1.Content")
.List<SomeDocument>();
我将只得到行,其中不为空。 NHibernate的会产生这样的SQL:
select * from
SomeDocument doc,
DocumentPart docPart,
where doc.DocumentPart1_ID = docPart.Id
order by docPart.Content
但我想是这样的:
select * from
SomeDocument doc
left join DocumentPart docPart on doc.DocumentPart1_ID = docPart.Id
order by docPart.Content
我的数据库是Oracle数据库11g企业版发布11.1.0.7.0 - 64位
ty先生。添加“select doc”查询字符串修复了问题。 – shkipper 2012-01-06 11:32:40
认真,我每次都要手动写出连接?没有办法在映射中配置它?让人惊讶。 – 2012-04-16 13:47:05
通常情况下,您可以将其配置为使用渴望的左连接,但在此查询中,我不确定结果是什么,因为'a.b.c'往往会创建从a到b的内连接。如果你不使用类似Transformers.DistinctRootEntity的东西,你可能会在结果中得到重复 – 2012-04-16 14:45:50