1. 程式人生 > >Hibernate org.hibernate.TypeMismatchException異常

Hibernate org.hibernate.TypeMismatchException異常

    Hibernate用得久了,但是一些基礎知識卻不知不覺忘記了,這不,今天就遇到了一個有趣的異常,搞了半小時才讓我發現原因,鬱悶啊。

    異常資訊:Exception in thread "main" org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.Integer, got class java.lang.String

    一開始我以為id屬性在配置檔案的型別配置不正確,仔細檢查一遍並沒有發現什麼不對,實體類裡用的Integer型別,oracle資料庫裡用的是number型別,怎麼可能查出來的資料的id這列是String型呢,百思不得其解,沒辦法,只能一句一句的找,看哪句程式碼可能出問題,最後終於找到了嫌疑程式碼,修改後證實確實是這句出了問題,程式碼如下:

Student gets=(Student)session.get(Student.class, "100");   

 取資料是,我給的id是字串 "100"  所以查出來的資料也自動將這一列也自動給轉成了String型。  真是無語!   誰讓我沒事給後面的id引數加個雙引號呢, 無奈, Hibernate真是太智慧了,   看來基礎知識還是很重要啊,   希望各位不要再犯我的這種錯誤, 在學習新技術的同時要溫習一些基礎知識,別搞個大工程,結果50%的時間浪費在了無謂的小錯誤上 。 這裡順便把Hibernate的測試程式碼貼出來,給大家溫習一下。沒事做做小測試,溫習一下也好:

   public static void main(String[] args) {

//最開始我們要建立需要使用Hibernate儲存到資料庫中的物件

Student s = new Student();

s.setAge(20);

s.setName("kj");

s.setClassName("t101");

//然後是使用Hibernate操作資料庫的過程

//首先建立Configuration物件

Configuration configuration = new Configuration();

configuration.configure();

//然後使用配置物件configuration建立SessionFactory物件

SessionFactory sessionFactory = configuration.buildSessionFactory();

//使用sessionFactory建立Session物件

Session session = sessionFactory.getCurrentSession();

//然後使用session開始一個事務

Transaction tx = session.beginTransaction();

//使用session儲存物件到資料庫

//session.save(s);

//使用session查詢資料庫中的資料

Student gets=(Student)session.get(Student.class, "100");

System.out.println(gets.toString());

//提交事務,物件資料真正儲存到資料庫中

tx.commit();

}