2013-02-14 47 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。