調試關於Hibernate的程序遇到的問題

最怕的就是初學一些東西,低級的錯誤犯了又犯,如今總結出來以便之後不要再犯相似的錯誤。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了。
相關文章
相關標籤/搜索