これを行う方法についてのアイデアは次のとおりですが、少し醜いです。
マッピングはOrderとUserの間に関係が存在することを示していないため、NHibernate にこれら 2 つのテーブル間の結合を生成させることはかなり困難です。代わりにできることは、SQL としてのクエリが次のようになるように内部選択を行うことです。
SELECT o.OrderId, o.WhateverOtherPropertyNameFromOrder
(SELECT u.UserName, u.WhateverOtherPropertyNameFromUser
FROM User u
WHERE u.UserId = o.UserId)
FROM Order o
これは、QueryOver で次のように実行できます。
Order order = null;
User user = null;
QueryOver<User> query = QueryOver.Of<User>(() => user)
.Select(Projections.ProjectionList()
.Add(Projections.Property<User>(x => x.UserName)))
.Add(Projections.Property<User>(x => x.WhateverOtherPropertyNameFromUser)))
.Where(Restrictions.EqProperty("user.Id", "order.UserId"));
var result = session.QueryOver<Order>(() => order)
.Select(Projections.ProjectionList()
.Add(Projections.Property<Order>(c => c.OrderId))
.Add(Projections.Property<Order>(c => c.WhateverOtherPropertyNameFromOrder))
.Add(Projections.SubQuery(query)))
.List<object[]>();
これがあなたにとって役立つかどうかはわかりませんが、問題の解決策になる可能性があります。