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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章