0

次のようなテーブルがあります。

ID | ローンプロファイル ID | from_state | to_state | 日にち

特定のloan_profile_idには複数のエントリがあります。

Hibernate を使用して、loan_profile_id のセットの特定の時間の前に最新のエントリを取得したいと考えています。これは私がSQLでそれを行う方法です:

select lps.* from loan_profile_state_changes lps inner join 
(select max(id) as maxId from loan_profile_state_changes where date < '2012-09-13 00:00:00' and loan_profile_id in (15744,15745,15746,15747,15748,15750,15751) group by loan_profile_id)maxIds
on maxIds.maxId = lps.id order by lps.id desc;

休止状態でこれを行うにはどうすればよいですか?

4

3 に答える 3

0

DetachedCriteriaの使用:

DetachedCriteria subQuery = DetachedCriteria.forClass(LoanProfileStateChanges.class);
subQuery.add(Restrictions.lt("date", new Date());
subQuery.add(Restrictions.in("id", Arrays.asList(1,2,3));
ProjectionList pl = Projections.projectionList();
pl.add(Projections.max("id")).add(Projections.groupProperty("loanProfileId"));
subQuery.setProjection(pl);

DetachedCriteria dc = DetachedCriteria.forClass(LoanProfileStateChanges.class);
dc.add(Subqueries.propertyIn("id", subQuery);
dc.addOrder(Order.desc("id"));

(内部結合は実行されませんが、実行プランの観点からは同等であることに注意してください)

于 2012-09-14T09:29:31.410 に答える
0

Hibernate HQL を使用してそれを行うことができます

Hibernate クエリ言語: サブクエリ

于 2012-09-14T08:16:34.540 に答える
0

Hibernate マニュアルから:

別の「猫」エンティティを「仲間」として参照する「猫」エンティティがあると仮定すると、

from Cat as cat inner join cat.mate as mate

次のように省略されることもあります。

from Cat as cat join cat.mate as mate
于 2012-09-14T08:24:59.787 に答える