休眠标准问题

时间:2012-07-09 12:34:01

标签: java database hibernate criteria

我有下表:

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)

因此,该方法构成了上述两种方法并减少了计算量。 该方法的想法是有一个对象集合,按一个标准排序,按照这个标准排序后,我们按一些字段选择项目。 那我怎么能在休眠中做到这一点?

1 个答案:

答案 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