20

我刚刚将 Hibernate 从 3.2.5 升级到4.2.0.CR1。我在 DAO 类中使用类似以下方法的方法来定位 Oracle 10g 中的当前行号createSQLQuery()

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)有什么替代方案呢?

4

3 回答 3

34

这个 Hinernate.Integer 自 3.6.x 起已被弃用

你应该IntegerType.INSTANCE改用。

于 2013-02-14T18:54:58.393 回答
6

如果您使用的是旧版本的 Hibernate,但不想在 3.5.x 或更低版本上使用已弃用的值,则必须使用new IntegerType(),因为IntegerType.INSTANCE在 3.6 之前不存在。

于 2014-12-04T05:24:11.987 回答
3

做:

  • 导入 org.hibernate.type.StandardBasicTypes;
  • 用 StandardBasicTypes.INTEGER 替换 Hibernate.INTEGER。
于 2015-09-07T21:55:59.317 回答