これらのテーブルを考えると:
create table Orders (
Id INT IDENTITY NOT NULL,
primary key (Id)
)
create table Items (
Id INT IDENTITY NOT NULL,
primary key (Id)
)
create table OrdersItems (
OrderId INT not null,
ItemId INT not null,
primary key (OrderId, ItemId)
)
HQL / criteria APIを使用して、次のSQLを生成するクエリを作成することは可能ですか?
SELECT
[OrderId], [ItemId]
FROM
[OrdersItems]
私はこれらのアプローチの両方を試しました:
var hqlResults = session
.CreateQuery("select order.id, item.id from Order order inner join order.Items item")
.List();
var criteriaResults = session
.CreateCriteria<Order>()
.CreateAlias("Items", "item", NHibernate.SqlCommand.JoinType.None)
.SetProjection(Projections.Property("id"), Projections.Property("item.id"))
.List();
ただし、どちらのアプローチも結合の生成を要求し(または、基準を使用する際に結合が存在しないために失敗し)、次のようなSQLが生成されます。
select order.Id,
item.Id
from Orders order
inner join OrdersItems ordersItems
on order.Id = ordersItems.ArticleId
inner join Items item
on ordersItems.CategoryId = item.Id
結合を必要とせずに、結合テーブルからのみ列を選択するクエリをNHibernateに生成させる方法はありますか?