私はSQLで次のようなクエリを作成しました...
SELECT c.clientfirstname,
c.clientlastname,
c.clientage,
c.status,
Sum(i.annualamount) AS amount,
p.planname,
c.clientid
FROM client c,
income i,
plan p
WHERE c.clientid = i.clientid
AND planid = (SELECT Max(p.planid)
FROM plan p
WHERE c.clientid = p.clientid
GROUP BY p.clientid)
AND ( c.clientfirstname LIKE 'rahul' )
GROUP BY i.clientid
このクエリは正常に機能していますが、アプリケーションで休止状態を使用しているため、上記の SQL クエリの代わりに休止状態の基準クエリを使用したいと考えています。planId=(SELECT MAX(p.planId) FROM plan p WHERE c.clientId=p.clientId GROUP BY p.clientId)
ハイバネート基準で上記のSQLクエリを記述する方法のような条件を追加しているときに問題が発生しています。私はこのクエリで試しました
DetachedCriteria dc = DetachedCriteria.forClass(Client.class);
dc.createAlias("plans", "pla");
ProjectionList proj = Projections.projectionList();
proj.add(Projections.max("pla.planId"));
proj.add(Projections.groupProperty("clientId"));
dc.setProjection(proj);
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Client.class);
criteria.createAlias("incoms", "inco");
criteria.createAlias("plans", "plan");
Criterion firstname = Restrictions.like("clientFirstName", searchValue+"%");
criteria.setProjection(
Projections.projectionList()
.add(Projections.property("clientFirstName"))
.add(Projections.property("clientLastName"))
.add(Projections.property("clientAge"))
.add(Projections.property("status"))
.add(Projections.sum("inco.annualAmount"))
.add(Projections.property("plan.planName"))
.add(Projections.groupProperty("clientId"))
);
criteria.add(Subqueries.propertyEq("plan.planId", dc));
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(firstname);
criteria.add(disjunction);
return criteria.list();
}
しかし、私はこのようなエラーが発生しています.....
Hibernate:
select this_.clientFirstName as y0_, this_.clientLastName as y1_,
this_.clientAge as y2_, this_.status as y3_, sum(inco1_.annualAmount) as y4_,
plan2_.planName as y5_, this_.clientId as y6_
from Client this_ inner join Income inco1_ on this_.clientId=inco1_.clientId
inner join Plan plan2_ on this_.clientId=plan2_.clientId
where plan2_.planId =
(select max(pla1_.planId) as y0_, this_.clientId as y1_
from Client this_ inner join Plan pla1_ on this_.clientId=pla1_.clientId
group by this_.clientId
)
and (this_.clientFirstName like ?
or this_.clientLastName like ?
or this_.clientPhoneNo like ?
or this_.clientEmail like ?)
group by this_.clientId
エラー: クエリを実行できませんでした
収入プランとクライアントの 3 つのテーブルがあり、クライアント ID はプラン テーブルと収入テーブルの両方の外部キーであり、プラン テーブルには 1 つのクライアント ID で利用できる多くのプラン名があり、プラン テーブルから clientId で最後のプラン グループを取得したい.. .
私の上記(上)のSQLクエリは問題ないので、休止状態の基準を使用して同じクエリが必要です。