其實這個問題在第一次使用hibernate4的時候就發現了,當時沒怎麼管,由於後來換用了mybatis。 java
如今又從新一個項目,用hibernate4來作,就出現了這個問題,鼓搗了好久,保存數據一直提示個人User類不是一個Entity,還好上次無心間發現瞭解決辦法,否則我又得放棄hibernate了。 spring
廢話很少說了,切入正題: 數據庫
你們都知道,hibernate和spring整合的方式有兩種, session
一種是寫hibernate.cfg.xml,而後在spring配置文件中配置sessionFactory的時候引入這個配置文件就能夠了 mybatis
第二種是直接將數據庫的鏈接寫在spring配置文件中,建一個dataSource的bean app
我用的是第一種,而後經過以下代碼引入的*.hbm.xml文件: ui
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- hibernate配置文件 --> <property name="configLocations"> <value>classpath:/com/singlesing/cfg/hibernate.cfg.xml</value> </property> <!-- mapping配置文件 --> <property name="mappingLocations"> <list> <value>classpath:/com/singlesing/bean/mapping/*.hbm.xml</value> </list> </property> </bean>
但是在對這些實體類操做的時候,就會報Unknown entity這個錯誤。出錯後,我把hbm.xml文件改寫在hibernate.cfg.xml文件中,就沒有這個問題了。 spa
我考慮了一下,緣由應該是當我要操做一個實體類的時候,我首先要獲取session,獲取session的代碼以下: hibernate
package com.singlesing.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @SuppressWarnings("deprecation") public class HibernateUtil { private static SessionFactory sessionFactory; static{ Configuration cfg = new Configuration().configure("com/singlesing/cfg/hibernate.cfg.xml");//注意這裏 sessionFactory = cfg.buildSessionFactory(); } @SuppressWarnings("rawtypes") public static final ThreadLocal session = new ThreadLocal(); @SuppressWarnings("unchecked") public static Session getCurrentSession()throws Exception{ Session s = (Session)session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession()throws Exception{ Session s = (Session)session.get(); if (s != null) { s.close(); } } }
我想應該是這樣,總之這樣能夠解決,可是要多些點代碼了,不過也就寫一次,不須要大的改動,也不太影響,不知道你們怎麼解決這個問題,也沒時間去查資料了,夜深了,得趕忙睡覺了。 code