第一個問題: 》》》》》》》未解決 2012年12月1號記
配置好了Session上下文了(Hibernate.cfg.xml裏面加一個<property name="current_session_context_class">thread<property>),在使用的時候如下:
Session session = sf.openSession();
>>>>>這之間沒有session.getTransaction().commit();使用啊。(使用了Session就自動關閉了)。那麼前後就應該是得到同一個Session 纔對啊。
先回顧一下二者的區別:1.二都是得到一個Session.前者二話不說直接在SessionFactory裏生成一個新的Session,後者會根據ThreadLocal管理模式查看前文是否已有Session,若已有就直接獲取利用,若沒有則新生成一個Session 2. 前者要顯示的關閉Session。即調用 close方法 session.close() ;後則在調用Session>getTransaction.commit()後自動關閉Session了。3.使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
* 如果採用jdbc獨立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果採用了JTA事務配置如下
<property name="hibernate.current_session_context_class">jta</property>
Session session2 = sf.CurrentGetSession();
在這裏:System.out.println(session == session2); 道理上應該是true纔對啊。
第二個問題:使用HQL查詢數據庫:報錯數據表沒有被映射。。
我檢查了各種映射文件。都沒有錯。真是糾結啊。。最後。。。。差了很多資料終於發現是HQL語句中的問題。
正確的如下所示:
我的model 類;
User.java hbm文件:Users.hbm.xml 裏面的class="......User"
HQL:
Query Sql = session.createQuery("from User as us where us.id= :Id");
Sql.setInteger("Id", 2);
user = Sql.list();
小結: HQL裏面的User 必須爲類名喲。。要統一的。要區分大小寫的