【发布时间】:2012-01-06 07:54:55
【问题描述】:
是否可以进行左连接,但使用 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; }
}
Part1 和 Part2 属性可以为空。
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>
现在如果我尝试通过Part1.Content 订购SomeDocuments:
UnitOfWork.CurrentSession
.CreateQuery("from SomeDocument doc order by doc.Part1.Content")
.List<SomeDocument>();
我只会得到DocumentPart1_ID 不为空的行。 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 Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit
【问题讨论】:
标签: nhibernate