首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Hibernate Batchsize排序

关于Hibernate Batchsize排序
EN

Stack Overflow用户
提问于 2012-11-14 22:13:07
回答 2查看 218关注 0票数 1

我是Hibernate的新手,但是我有一个关于@Batchsize注解工作的问题。我知道它是如何工作的,但我不明白它是如何对实体id进行分组以进行选择的。例如,我有两个类: Car和Wheel。汽车有车轮列表,并且必须为空。我创建了10辆汽车--其中5辆有一个Wheel列表,另有5辆没有。

代码语言:javascript
复制
    List<Car> cars = session.createQuery("from Car").list();
    for (Car car : cars) {
        List<Wheel> wheels = car.getWheels();
        for (Wheel wheel : wheels) {
            System.out.println(wheel.getTitle());
        }
    }

在那之后,我在我的控制台上看到了类似这样的东西:

代码语言:javascript
复制
Hibernate: 
select
    wheels0_.car_id as car3_1_,
    wheels0_.id as id1_,
    wheels0_.id as id0_0_,
    wheels0_.title as title0_0_ 
from
    Wheel wheels0_ 
where
    wheels0_.car_id in (
        ?, ?, ?, ?, ?
    )
17:50:35,505 TRACE LongType:151 - binding '25' to parameter: 1<br>
17:50:35,505 TRACE LongType:151 - binding '18' to parameter: 2<br>
17:50:35,505 TRACE LongType:151 - binding '17' to parameter: 3<br> 
17:50:35,506 TRACE LongType:151 - binding '20' to parameter: 4<br> 
17:50:35,506 TRACE LongType:151 - binding '23' to parameter: 5<br>

但在下一次我会得到别人的绑定。它可以是1、15、23或其他。但是我误解了- hibernate是如何选择id的for IN语句的?为什么不按ASC或DESC排序(例如- 1、2、3、4、5)?

EN

回答 2

Stack Overflow用户

发布于 2012-11-14 22:20:41

这是填充汽车列表的顺序。如果你想按id升序,你可以这样做:List<Car> cars = session.createQuery("from Car order by id asc").list();

票数 1
EN

Stack Overflow用户

发布于 2013-03-11 11:03:24

如果您关心汽车的顺序,那么,正如tibtof所提到的,只需修改原始查询以添加order by子句,这样您就可以按顺序迭代汽车。

如果您关心每个列表中控制盘的顺序(例如,对于Car1.getWheels(),Wheel1必须排在Wheel2之前),BatchSize不会为您提供排序选项。考虑将Wheel类设为Comparable,并添加一个方便的方法,如getSortedWheels()

代码语言:javascript
复制
public List<Wheel> getSortedWheels() {
    List<Wheel> wheels = getWheels();
    Collections.sort(wheels);
    return wheels;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13380461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档