Hibernate模板类【理解】【应用】【重点】

1.HibernateTemplate使用方式

//添加方法

public void add(User u){

  this.getHibernateTemplate().save(u);

}


//删除方法

public void delete(User u){

  this.getHibernateTemplate().delete(u);

}


//修改方法

public void update(User u){

  this.getHibernateTemplate().update(u);

}



//按uuid查询实体

public User getByUuid(Long uuid){

  return this.getHibernateTemplate().get(User.class,uuid);

}


//返回全部数据集合

public List<User> getAll(){

  return this.getHibernateTemplate().find("from User");

}


//返回分页集合数据

public List<User> getAll(int pageNum,int prePageNum){

  DetachedCriteria dc = DetachedCriteria.forClass(User.class);

  return this.getHibernateTemplate().findByCriteria(dc, (pageNum-1)*prePageNum, prePageNum);

}


2.No Session问题

前提:

1.load方法是延迟加载的(所有存在延迟加载现象的操作)

2.业务逻辑层并没有加载该数据的延迟数据

3.表现层获取时事务已经关闭,所以该对象无法支持延迟加载,造成noSession问题

解决方案:(方案2更灵活)

1.

<set name="mealPojo" inverse="true" lazy="false"
        fetch="join" cascade="all">

2.Hibernate提供了一个工具方法,用于将一个延迟加载的对象中的数据全部立即加载

Hibernate.initialize(u);

3.将事务开到表现层,添加OpenSessionInViewFilter

<filter>

  <filter-name>openSessionInView</filter-name>

  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter>

<filter-mapping>

  <filter-name>openSessionInView</filter-name>

  <url-pattern>/*</url-pattern>
</filter-mapping>

说明:

  A. OpenSessionInView过滤器必须在struts2的核心过滤器之前开启,否则struts2获取数据时,仍然会出现Session已经关闭的现象

  B.如果使用OpenSessionInView过滤器时,出现FlushModel相关的异常,换用如下过滤器,将事务设置为自动事务,而不是只读事务

<filter>

  <filter-name>openSessionInView</filter-name>

  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  <init-param>

    <param-name>sessionFactoryBeanName</param-name>

    <param-value>sessionFactory</param-value>

  </init-param>

  <init-param>

    <param-name>singleSession</param-name>

    <param-value>true</param-value>

  </init-param>

  <init-param>

    <param-name>flushMode</param-name>

    <param-value>AUTO</param-value>

  </init-param>

</filter>

<filter-mapping>

  <filter-name>openSessionInView</filter-name>

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

</filter-mapping>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值