2013-02-14 29 views
15

Tôi vừa nâng cấp Hibernate từ 3.2.5 lên 4.2.0.CR1. Tôi đã sử dụng một cái gì đó giống như các phương pháp sau đây trong các lớp học DAO để xác định vị trí số hàng hiện tại trong Oracle 10g với phương pháp createSQLQuery().Hibernate.INTEGER không khả dụng, khi phiên bản Hibernate được nâng cấp lên 4.2.0.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(); 
} 

Phương pháp .addScalar("row_num", Hibernate.INTEGER) như trong đoạn mã trên, đưa ra một lỗi thời gian biên dịch.

cannot find symbol 
symbol: variable INTEGER 
location: class Hibernate 

Không có sẵn trong lớp org.hibernate.Hibernate. IDE NetBeans tôi đang sử dụng là 7.2.1 không liệt kê một hằng số như vậy. Tìm kiếm của Google không thể đưa tôi đến giải pháp thực tế. Vì vậy, các thay thế trong phiên bản này của Hibernate (4.2.0.CR1) là gì?

Trả lời

25

Hinernate.Integer này bị phản đối từ 3.6.x

Bạn nên sử dụng IntegerType.INSTANCE để thay thế.

5

Nếu bạn đang sử dụng phiên bản cũ hơn của Hibernate, nhưng không muốn sử dụng giá trị không được chấp nhận trong khi trên 3.5.x trở xuống, bạn sẽ phải sử dụng new IntegerType()IntegerType.INSTANCE không tồn tại trước 3.6.

1

Đỗ:

  • org.hibernate.type.StandardBasicTypes nhập khẩu;
  • thay thế Hibernate.INTEGER bằng StandardBasicTypes.INTEGER.
Các vấn đề liên quan