私は次のテーブルを持っています:
Table table1
table1Id
field1
field2
field3
Table table2
table2Id
table2_field1
table2_field2
table2_field3
table1Id
このメソッドでは、いくつかのフィールドでソートされた table1 からオブジェクトを取得します
public List<table1> getMost() {
DetachedCriteria criteria = (DetachedCriteria) DetachedCriteria.forClass(table1.class);
//criteria.add(Restrictions.conjunction());
criteria.addOrder(Order.desc("field1"));
List<table1> myList = (List<table1>) findByCriteria(criteria,
false, 0, 10);//get first 10 elements by some criteria
return myList;
}
次に、いくつかのフィールドでソートされたデータベースからオブジェクトを取得する必要がありますが、これらのオブジェクトはテーブル1のオブジェクトに依存しています
public Item getTheBest(Long table1Id) {
DetachedCriteria criteria = (DetachedCriteria) DetachedCriteria
.forClass(Item.class);
DetachedCriteria maxQuery = DetachedCriteria.forClass(Item.class);
maxQuery.add(Restrictions.eq("table1Id", table1Id)).setProjection(
Projections.max("table2_field1"));
criteria.add(Restrictions.and(
Restrictions.eq("table1Id", table1Id),
Property.forName("table2_field1").eq(maxQuery)));
List<Item> result = (List<Item>) findByCriteria(criteria, false);
if (result.iterator().hasNext())
return result.iterator().next();
else
return null;
}
私がしたいのは、次のような方法です:
public Item getTheBest(List<Long> table1Ids)
したがって、この方法は上記の 2 つの方法を組み合わせて、計算量を減らします。メソッドのアイデアは、オブジェクトのコレクションを 1 つの基準でソートし、この基準でソートした後、いくつかのフィールドで項目を選択することです。どうすれば休止状態でそれを行うことができますか?