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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值