Можно ли сделать левое соединение, но упорядочить по столбцу в правой таблице, используя 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 могут иметь значение null.
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>();
Я получу только строки, в которых 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, выпуск 11.1.0.7.0 - 64 бита