gpt4 book ai didi

java - hibernate 标准问题

转载 作者:行者123 更新时间:2023-12-01 15:17:46 24 4
gpt4 key购买 nike

我有下一张 table :

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)

因此该方法综合了上述两种方法,计算量较少。该方法的想法是拥有一个对象集合,按一个标准排序,并在按此标准排序后,我们按某个字段选择项目。那么我怎样才能在 hibernate 状态下做到这一点呢?

最佳答案

我从上面了解到的是,您有“一个有序的查询结果,并且您想要进一步过滤它”。

您可以在 native SQL 中执行此操作,并使用 hibernate 将查询结果转换为 java 对象。下面是一个例子

选择FROM (SELECT t1.a, t1.b FROM table1 t1 {GROUP BY if need} ORDER BY t1.a) 子表,表2 t2其中 t1.a = 某事并且 t2.x = 某事

关于java - hibernate 标准问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com