"没有Hibernate Session绑定到线程"查询时除非添加@Transactional注释

时间:2015-10-13 10:14:57

标签: java spring hibernate

我只需要维护一个新项目,并使用Hibernate + Spring。我写了一个DeliveryInfoServiceImpl,它有一个查询某个实体但没有任何更新或保存操作的方法,但是我有一个错误:

Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

除非我在方法或类上添加@Transactional。

我的问题是:

  1. 为什么我必须添加@Transactional,虽然我只执行选择查询?
  2. 添加@Transactional是否意味着启用事务支持,当我仅使用" select"时,可能会产生更多不必要的开销。查询。
  3. 以下是我的代码段:

    @Override
    public List<UnavailableRestaurantBean> getUnavailableRestaurantBean(String custAddress, List<Long> dishesId) {
        List<Dish> dishes = getDishByIds(dishesId);//exception here
        .... 
    
    }
    
    
    private List<Dish> getDishByIds(List<Long> ids){
        return deliveryInfoDao.findByIds(Dish.class,ids);
    }
    

    我有以下事务管理器配置:

    <tx:annotation-driven transaction-manager="myTxManager" />
    
    <bean id="myTxManager" name="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="mySessionFactory">
        </property>
    </bean>
    

0 个答案:

没有答案