You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring ORM中HibernateTemplate无默认构造函数异常排查求助

异常原因分析:HibernateTemplate 无默认构造函数报错

异常信息

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in class path resource [config.xml]: Failed to instantiate [org.springframework.orm.hibernate5.HibernateTemplate]: No default constructor found

配置文件(config.xml)

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" name="ds">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/springorm"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

<bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" name="factory">
    <property name="dataSource" ref = "ds"></property>
    
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>  
        </props>
    </property> 
    
    <property name="annotatedClasses"> 
        <list>
            <value>com.spring.orm.entities.Student</value>
        </list>
    </property>
</bean>

<bean class="org.springframework.orm.hibernate5.HibernateTemplate" name="hibernateTemplate">
    <property name="sessionFactory" ref="factory"/>
</bean>

<bean class="com.spring.orm.dao.StudentDaoImpl" name="studentDao">
    <property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>

依赖配置(pom.xml)

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>6.1.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>6.1.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.1.1.Final</version>
            <type>pom</type>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.1.1.Final</version>
        </dependency>
        
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
</dependencies>

异常原因

1. Spring与Hibernate版本严重不兼容

你使用的Spring 6.1.1属于Spring 6.x系列,配置中使用的org.springframework.orm.hibernate5.HibernateTemplate是Spring专门为Hibernate 5.x设计的整合类,但你引入的Hibernate版本是6.1.1.Final。两个版本的API差异极大,导致Spring无法正确识别HibernateTemplate的构造函数,进而抛出“无默认构造函数”的错误。

2. 重复的Hibernate依赖引发冲突

pom.xml中同时引入了org.hibernate:hibernate-core(type为pom)和org.hibernate.orm:hibernate-core,前者是Hibernate 5.x及以前的groupId,后者是Hibernate 6.x开始使用的新groupId。这种重复引入会导致类路径中混入不同版本的Hibernate类,进一步干扰Spring的Bean实例化流程。

3. HibernateTemplate已过时

Spring 6.x中,HibernateTemplate已被官方标记为过时,官方推荐直接使用Hibernate原生API或Spring Data JPA来实现数据持久化,这也是版本适配问题的潜在诱因。

修复建议

  • 清理重复依赖:删除org.hibernate:hibernate-core的依赖条目,只保留org.hibernate.orm:hibernate-core:6.1.1.Final。
  • 改用Hibernate 6对应的整合类:将配置文件中HibernateTemplate的类路径改为org.springframework.orm.hibernate6.HibernateTemplate,同时将LocalSessionFactoryBean改为org.springframework.orm.hibernate6.LocalSessionFactoryBean,确保与Hibernate 6版本匹配。
  • 降级版本(可选):如果不想使用新的整合类,可以将Spring版本降级到5.x系列(如5.3.x),搭配Hibernate 5.x版本,这样原有的hibernate5包下的类可以正常工作。

内容的提问来源于stack exchange,提问作者Akshita Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:15:29