调试关于Hibernate的程序遇到的问题

最怕的就是初学一些东西,低级的错误犯了又犯,现在总结出来以便以后不要再犯类似的错误。

一、Hibernate的延迟加载机制

在用hibernate底层访问数据库的过程忽略了延迟加载机制导致

 

在访问时候的代码:

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了。
原文地址:https://www.cnblogs.com/blueness-sunshine/p/4912025.html