2013-02-14 66 views
15

我剛將Hibernate從3.2.5升級到4.2.0.CR1。我在DAO類中使用了類似於以下方法的東西,通過createSQLQuery()方法在Oracle 10g中查找當前行號。當休眠版本升級到4.2.0時,Hibernate.INTEGER不可用.CR1

SELECT row_num 
FROM (SELECT row_number() 
       OVER (
        ORDER BY banner_id DESC) AS row_num, 
       banner_id 
     FROM banner_images 
     ORDER BY banner_id DESC) 
WHERE banner_id = :id 
@Override 
@SuppressWarnings("unchecked")  
public int getCurrentRow(String id, int rowsPerPage) 
{   
    return (Integer) sessionFactory 
        .getCurrentSession() 
        .createSQLQuery("Above query") 
        .addScalar("row_num", Hibernate.INTEGER) //<------- ??? 
        .setParameter("id", Long.parseLong(id)) 
        .uniqueResult(); 
} 

如在上述代碼段中所示的.addScalar("row_num", Hibernate.INTEGER)方法,發出一個編譯時間錯誤。

cannot find symbol 
symbol: variable INTEGER 
location: class Hibernate 

它不在org.hibernate.Hibernate類中。我使用的NetBeans IDE 7.2.1沒有列出這樣一個常量。谷歌搜索無法讓我找到實際的解決方案。那麼這個版本的Hibernate(4.2.0.CR1)有什麼選擇?因爲3.6.x的

您應該使用IntegerType.INSTANCE代替

回答

25

這Hinernate.Integer已被棄用。

5

如果您使用的是舊版本的Hibernate,但不希望在3.5.x或更低版本中使用棄用的值,則必須使用new IntegerType(),因爲IntegerType.INSTANCE在3.6之前不存在。

1

務必:

  • 進口org.hibernate.type.StandardBasicTypes;
  • 由StandardBasicTypes.INTEGER替換Hibernate.INTEGER。