hibernate的懒加载异常

hibernate的懒加载异常

1. 问题

​ 最近写了一个demo,可是一直显示懒加载异常,自己也是很郁闷!

在这里插入图片描述

2. 解决

​ 记得之前学习hibernate过程中,一般hibernate若使用了懒加载,且session关闭了,那么在使用它,就会出现懒加载异常。所以问题就出在关闭session上,由于自己为了可以测试dao,所以在spring配置文件中把事务弄在dao的实现方法上。只要把事务绑定在service中的方法即可,可是这样就会导致另一个问题,测试方法无法进行,ide会提示sessioin不在当前进程中。其实我们可以先把事务绑定给dao的实现方法,先测试没有懒加载的方法,之后在把事务绑定给service,然后在service中顺便测试一下那些懒加载的方法。

3. 代码

spring配置文件

<!--自动扫描的包-->
<context:component-scan base-package="com.mulin.demo">
</context:component-scan>
<!-- 配置数据源-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="comboPooledDataSource" 
	class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="user" value="${jdbc.user}"></property>	
	<property name="password" value="${jdbc.password}"></property>	
	<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>	
	<property name="driverClass" value="${jdbc.driverClass}"></property>	
	<property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>	
	<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>	
</bean>
<!-- 配置sessionFactory-->
<bean id="localSessionFactoryBean" 
	class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	<property name="dataSource" ref="comboPooledDataSource"></property>	
	<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
	<property name="mappingLocations" value="classpath:com/mulin/demo/domain/*.hbm.xml"></property>
</bean>
<!-- 配置事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
	<property name="sessionFactory" ref="localSessionFactoryBean"></property>
</bean>
<!-- 配置事务之间的方法关系 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="*"/>
	</tx:attributes>
</tx:advice>
<!-- 配置事务的切点-->
<aop:config>	
	<aop:pointcut expression="execution(* com.mulin.demo.service.*.*(..))" 
	id="pointCut"/>
	<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
</aop:config>

dao:其他dao都是类似的


@Repository
public class OrderDaoImpl implements OrderDao {
@Autowired
private SessionFactory sessionFactory;

public Session getSession() {
	return sessionFactory.getCurrentSession();
}

@Override
public int addOrder(Order order) {
	String sql = "INSERT INTO orders(ORDER_NAME,ORDER_DATE,USER_ID) "
			+"VALUES(?,?,?) ";
	Query query = getSession().createSQLQuery(sql)
			.setString(0, order.getOrderName())
			.setDate(1, order.getOrderDate())
			.setInteger(2, order.getUser().getUserId());
	return query.executeUpdate();
}

@Override
public int deleteOrder(Integer userId) {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public long countOrder() {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public Order getOrder(Integer orderId) {
	String hql = "FROM Order o "
			+"WHERE o.orderId = ? ";
	return (Order) getSession().createQuery(hql).setInteger(0, orderId)
			.uniqueResult();
}

@SuppressWarnings("unchecked")
@Override
public List<Order> getAllOrder(User user) {
	String hql = "FROM Order o "
			+"WHERE o.user = ? ";
	return getSession().createQuery(hql).setEntity(0, user)
			.list();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值