没有Hibernate Session绑定到使用generic-hibernate-dao库的线程

时间:2011-10-30 10:49:58

标签: java hibernate spring spring-mvc hibernate-session

我正在使用Spring 3.0.5,Hibernate 3.3和generic-hibernate-dao。我已经将Hibernate SessionFactory配置如下:

<bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean?"> 
    <property name="dataSource">
        <ref local="dataSource" /> 
    </property> 
<property name="packagesToScan" value="com.xxx.re.admin.model" /> <property name="hibernateProperties">

        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.MySQLDialect 
            </prop> 
            <prop key="hibernate.show_sql">false</prop> 
            <prop key="hibernate.hbm2ddl.auto">validate</prop> 
        </props> 
    </property> 
</bean> 

<!-- Transaction manager for a single Hibernate SessionFactory? (alternative
    to JTA) --> 
<tx:annotation-driven /> 

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager?"> 
    <property name="sessionFactory">
        <ref local="sessionFactory" /> 
    </property> 
</bean> 

我已经创建了一个BaseDAOImpl并使用域DAO扩展如下:

public class BaseDAOImpl<T, ID extends Serializable> extends GenericDAOImpl<T, ID> {
    @Autowired @Override public void setSessionFactory(SessionFactory? sessionFactory) {
        super.setSessionFactory(sessionFactory); 
    } 
}

@Repository public class LocaleDAOImpl extends BaseDAOImpl<Locale, Long> implements LocaleDAO {

}

访问我的spring控制器(调用dao.findAll())时出现以下错误:

org.hibernate.HibernateException?: 
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here.

1 个答案:

答案 0 :(得分:0)

使用@Transactional注释您的控制器(如果它是您的控制器和DAO之间的中间件,则可能是某些服务)。服务实际上是一个更好的地方,否则你需要在<tx:annotation-driven /> MVC配置文件中放置*-servlet.xml

我从未使用过这个库(我个人使用Spring产品组合中的Spring Data JPA),但是文档没有说明任何关于事务的内容,所以我想由用户来配置它们。 / p>

更新:查看他们提供的示例似乎我是对的:

@Transactional
public class CitizenServiceImpl implements CitizenService {
//...

http://code.google.com/p/hibernate-generic-dao/source/browse/trunk/sample/jpa-hibernate-maven/src/main/java/sample/googlecode/genericdao/service/CitizenServiceImpl.java?r=635