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 必须为类名哟。。要统一的。要区分大小写的

 

你可能感兴趣的:(学习问题集)