最怕的就是初學一些東西,低級的錯誤犯了又犯,如今總結出來以便之後不要再犯相似的錯誤。java
1、Hibernate的延遲加載機制數據庫
在用hibernate底層訪問數據庫的過程忽略了延遲加載機制致使session
在訪問時候的代碼:app
public New showNew(int id) {
New newShow = null;
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
newShow = (New)session.load(New.class, id);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
throw new DaoException("查詢單條新聞訪問底層數據庫拋出異常!");
} finally{
HibernateUtil.closeSession(session);
}
return newShow;
}
而配置的New.hbm.xml文件裏是這樣:
<hibernate-mapping package="com.demo">
<class name="com.demo.New" table="news" >
<id name="id">
<generator class="native"/>
</id>
<property name="title"/>
<property name="content"/>
<property name="addTime" column="addtime"/>
</class>
</hibernate-mapping>
hibernate的lazy策略是打開的,若沒有設class的lazy值(true、false、extra)就會延遲加載直到在session打開的狀況,要使用newShow對像時候纔會被建立,因此沒有獲得newShow對象也就是這個緣由了。
改正策略很簡單,就是在xml文件的class標籤後添加lazy="false"就OK了。