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

来源:互联网 发布:css布局 书籍 知乎 编辑:程序博客网 时间:2024/06/06 14:24

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 0
原创粉丝点击