Hibernate_學習之問題集

 第一個問題:              》》》》》》》未解決  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 必須爲類名喲。。要統一的。要區分大小寫的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章