Hibernate订购

时间:2009-06-20 20:08:46

标签: java hibernate

我有车辆类和映射文件,我希望从ID desc订购车辆表中的所有行(我的其他表也需要相同)。

我收到了以下代码:

session = HibernateUtil.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();

q = session.createQuery("from Vehicles order by ID DESC");

    for (Iterator it=q.iterate(); it.hasNext();){
         //some logic
    }

但是我的套装不按ID排序,每次都有不同的顺序,如RAND()或其他东西。我想知道保留功能的最简单方法是什么,只是添加order by子句,因为我在很多地方都有相同的语法......

3 个答案:

答案 0 :(得分:1)

我假设您的车辆类看起来像这样?我在这里使用JPA因为这就是我所知道的......

class Vehicles {
    @Id
    @Column(name="vehicles_id")
    private int id;
    // other stuff here
}

我不希望你的session.createQuery与我的不同,所以不会有这样的工作吗?

Query q = session.createQuery("select v from Vehicles v order by v.id desc");

如果你愿意,也可以使用标准吗?

class Main {
    List<Vehicles> cars;
}

Criteria main = session.createCriteria(Main.class);
Criteria secondary = main.createCriteria("cars");
secondary.addOrder(Order.asc("id"));

答案 1 :(得分:1)

尝试“q = session.createQuery(...);”部分:

List results = q.list()
//loop through results

其他地方可能存在问题,因为“按id desc排序”部分是正确的。如果您具有正确的数据类型并且索引设置正确,请检查数据库/映射文件。

答案 2 :(得分:0)

你有没有试过“来自车辆v vid by v.id desc”?另一个选项是将可比较的接口添加到实体,然后将查询创建的列表放入一个sortedset。这通常是我在需要排序时所做的事情。