基準:
var subQuery = DetachedCriteria.For<RecordInfo>();
.Add(Restrictions.Eq("Property1", "some string"))
.Add(Restrictions.EqProperty("Property2", "record.Id"))
.SetProjection(Projections.Max("Id"));
var criteria = session.CreateCriteria(typeof(Record), "record")
.CreateAlias("record.ListOfRecordInfo", "recordInfo")
.Add(Subqueries.PropertyEq("recordInfo.Id", subQuery));
Sybase ASE 15.5 ダイアレクトの場合、次のようなものが生成されます。
SELECT this_.Record_Id as Record1_2_3
...
FROM Record this_
INNER JOIN Record_Info Record_Info_
ON this_.Record_Id = Record_Info_.Property_2
WHERE Record_Info_.Record_Info_Id =
(
SELECT max(this_0_.Record_Info_Id) as y0_
FROM Record_Info this_0_
WHERE this_0_.Property_1 = @p0
AND this_0_.Property_2 = this_.Record_Id
)
問題は、生成された as y0_ です。Sybase は、使用しているバージョンの Sybase のサブクエリのエイリアスを許可していません。
NHibernate がサブクエリのエイリアスを生成しないようにクエリを変更するにはどうすればよいですか?