私は、今後のプロジェクトのために NHibernate を評価する作業を行っており、いくつかの使用例を調べて、それがどのように機能するかを確認しています。Criteri API を使用して次のクエリを表現する方法をまだ見つけられていません。
2 つのかなり基本的なテーブル (この例では省略されています)
CREATE TABLE Person
(
PersonNo INT,
BirthDate DATETIME
)
CREATE TABLE PersonDetails
(
PersonNo INT,
FirstName VARCHAR(30),
Surname VARCHAR(30)
)
そしてクエリ...
SELECT P.PersonNo, P.FirstName, P.Surname
FROM Persons P
JOIN PersonDetails PD
ON PD.PersonNo = P.PersonNo
AND EffDate =
(
SELECT MAX(EffDate)
FROM PersonDetails
WHERE PersonNo = PD.PersonNo
)
WHERE P.PersonNo = 1
基本的に、個人マスター レコードと最新の個人リビジョン レコードを 1 つのオブジェクトにフラット化しようとしています。HQL を使用してこれを簡単に行うことができましたが、相関サブクエリを機能させることができません。
これが私の試みです。
var pdSub = DetachedCriteria.For<PersonRevision>("pdSub")
.SetProjection(
Projections.ProjectionList()
.Add(Projections.Max("EffDate").As("MaxEffDate"))
.Add(Projections.Property("Person.PersonNo").As("PersonNo"))
.Add(Projections.GroupProperty("Person.PersonNo")))
.Add(Expression.EqProperty("pdSub.Person.PersonNo", "p.PersonNo"));
var p =
session.CreateCriteria<Person>("p")
.Add(Restrictions.Eq("p.PersonNo", 1))
.Add(Subqueries.Eq("p.PersonNo", pdSub))
.List();
サブクエリ pdSub はすでに関係を (PersonNo によって) 定義していますが、サブクエリ クラスでは別の関係を定義する必要があります (Eq など)?
どんな助けでも大歓迎です。
ありがとう、ジョン