`
liushu1234
  • 浏览: 10198 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

hibernate笔记

阅读更多
1, hibernate中有自动的级联删除,在表定义的xml文件中有cascade属性

2, hibernate实现的链接查询默认是在使用的时候才进行的,例如查询到user下面的customer属性,只有用到user.customer.name时hibernate才会执行数据的查询。

3,hibernate的配置文件中的hbm2ddl.auto属性表示在执行程序时对数据库模式是采取更新还是采取创建模式。

4,HQL语言是面向对象的查询,和SQL类似,但面向的是已经定义好的实体bean。from语句后不是跟的表明,而是对象名。

5,hibernate也可以使用存储过程,只是麻烦了点,自己没实现过。要在配置文件中和配置sql查询语句类似的配置一下,再把callable属性设为TRUE。

6.hibernateTemplate中的属性若为null,则bean中各种属性的类型可设为对象型。例如int为Integer,date为Date型。以免出现空置时会引发异常。

7.hibeernate中的many-to-one属性中也有lazy属性。现在还没研究清楚,但是若不设置lazy=FALSE则不能取出子属性中的数据。

8.在父对象的class属性上设置lazy=true。则子对象查询时不会将父对象查询出来。但是lazy是在session范围内有效。若session关闭,则不能取出子对象,会报lazyinitialize的错误。

9.解决spring和hibernate集成时的lazy属性使用方法
  在HIbernateTemplate中我们可以看到一个核心的方法:
public Object execute(HibernateCallback action, boolean exposeNativeSession)         throws DataAccessException {     …………     ………… 其中finally的定义为  finally {      …………   else {    // Never use deferred close for an explicitly new Session.    if (isAlwaysUseNewSession()) {     SessionFactoryUtils.closeSession(session);    }    else {     SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());    } 从这里我们可以看到如果isAlwaysUseNewSession()为true的话,session将会在方法执行完之后关闭,那么我们知道 它的find(String ...)在调用CallBack的时候是这样实现的:  execute(new HibernateCallBack(){...},true);  因此,如果我们使用@OneToMany的话,设置FeatchType.LAZY在调用One.getMany()欲返回集合的话,会因为session 关闭而出现错误,当然知道了这一点解决起来就比较的简单了:  我们可以使用getHibernateTemplate().execute(new HibernateCallBack(){});因为在HibernateTemplate中 exposeNativeSession的默认值为false,当然,如果不放心的话,可以显式的调用:    execute(new HibernateCallBack(){},false);

  若是在web项目中,则可以在web.xml中加入
  <filter>

       <filter-name>hibernateFilter</filter-name>

       <filter-class>

           org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

       </filter-class>

    </filter>

    <filter-mapping>

       <filter-name>hibernateFilter</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>
   加入此拦截器后,spring会将lazy属性的子类的id存放在一个handler中,需要的时候再查询出来。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics