Hibernate.INTEGER недоступен, если версия Hibernate обновлена ​​до 4.2.0.CR1

Я только что обновил 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, которую я использую, - это 7.2.1, не указывающая такую ​​константу. Поиск Google не мог привести меня к фактическому решению. Итак, какова альтернатива в этой версии Hibernate (4.2.0.CR1)?

Ответы

Ответ 1

Этот Hinernate.Integer устарел с 3.6.x

Вместо этого следует использовать IntegerType.INSTANCE.

Ответ 2

Если вы используете более старую версию Hibernate, но не хотите использовать устаревшее значение в 3.5.x или ниже, вам придется использовать new IntegerType(), потому что IntegerType.INSTANCE не существует до 3.6.

Ответ 3

делать:

  • import org.hibernate.type.StandardBasicTypes;
  • замените Hibernate.INTEGER на StandardBasicTypes.INTEGER.