2009-06-20 71 views
0

我有Vehicles類和它的映射文件,我想從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()什麼的。我想知道什麼是最簡單的方法來保持功能,只是添加順序條款,因爲我有許多地方相同的語法...

+0

你可以打開日誌記錄或在你的配置中設置show_sql = true,以便你可以看到生成的SQL看起來像什麼?它應該是顯而易見的,如果它錯過了訂單。 – 2009-06-21 05:24:55

回答

1

在「q = session.createQuery(...);」後面試試部分:

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

其他地方可能有錯,因爲「按ID排序」部分是正確的。如果您有正確的數據類型並且索引設置正確,請檢查數據庫/映射文件。

0

你試過「從車v v.id desc命令」?另一種選擇是將可比較的接口添加到實體,然後將查詢創建的列表放入排序集。這通常是我在需要排序時所做的。

+0

是的,我做了,不工作... 是否有任何其他方式,因爲我需要大量的時間爲我的所有類添加可比較的接口,我需要做一些代碼中的其他更改... – Splendid 2009-06-20 20:21:07

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"));