私はしばらくこれに苦労しているので、誰かが私に何らかのガイダンスを与えることができることを願っています. 私は2つのテーブルを持っています:
WardTransactions:
+-----------+
| Field |
+-----------+
| Id |
| VisitId |
| Event |
| EventTime |
+-----------+
Visits:
+---------------+
| Field |
+---------------+
| Id |
| VisitNumber |
+---------------+
訪問ごとに多くの WardTransactions が存在する可能性があります。Hibernate Criteria/Projections を使用して、特定の訪問の最新の WardTransaction を見つけようとしています。例えば:
public WardTransaction findLast(Visit visit) {
DetachedCriteria maxQuery = DetachedCriteria.forClass( WardTransaction.class );
maxQuery.setProjection( Projections.max( "id" ) );
Criteria query = getSession().createCriteria( WardTransaction.class )
.createAlias("visit", "visit")
.add(Restrictions.eq("visit.id", visit.getId()))
.add(Property.forName( "id" ).eq( maxQuery ));
return (WardTransaction) query.uniqueResult();
}
これは機能していません。結果のクエリを見ると、必要な Visit を持つレコードの Maximum ではなく、Max WardTransaction.Id を使用して内部結合を実行しているように見えます。つまり、(より明確にするために変更されています):
select
a.Id,
a.VisitId,
a.Event,
a.EventTime,
b.Id,
b.VisitNumber,
from
WardTransactions a
inner join
Visits b
on a.VisitId=b.Id
where
b.Id='22'
and a.Id = (
select
max(a.Id) as y0_
from
WardTransactions a
)
私は他のアプローチを試しましたが、私が探している解決策にはなりません。アドバイス、ガイダンスをいただければ幸いです。