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();
}