我有下表:
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;
}
然后我需要从某个字段排序数据库中的对象,但这些对象依赖于table1
中的对象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)
因此,该方法构成了上述两种方法并减少了计算量。 该方法的想法是有一个对象集合,按一个标准排序,按照这个标准排序后,我们按一些字段选择项目。 那我怎么能在休眠中做到这一点?
答案 0 :(得分:1)
我从上面了解到你有一个有序的查询结果,你想进一步过滤它&#34;。
您可以在本机SQL中执行此操作,并使用hibernate将查询结果转换为Java对象。以下是一个例子
选择 FROM(SELECT t1.a,t1.b FROM table1 t1 {GROUP BY if needed} ORDER BY t1.a)subTable, table2 t2 在哪里t1.a = SOMETHING AND t2.x = SOMETHING