Spring MVC项目启动报错:Employee实体未映射问题求助
解决Spring MVC中Employee实体未映射的HQL错误
错误信息
jakarta.servlet.ServletException: 请求处理失败: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Employee未映射 [from Employee] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1022) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
核心问题
Hibernate无法识别Employee实体类的映射配置,导致执行HQL查询时抛出未映射异常。
排查与解决方案
1. 修正Spring与Hibernate版本不兼容的配置
你当前使用Spring 6.1.10搭配Hibernate 6.2.0.Final,但配置文件中用的是针对Hibernate 5的SessionFactory和事务管理器类,两者不兼容,导致实体扫描失败。
修改applicationContext.xml中的以下配置:
- 将SessionFactory的实现类从
org.springframework.orm.hibernate5.LocalSessionFactoryBean改为org.springframework.orm.hibernate6.LocalSessionFactoryBean - 将事务管理器类从
org.springframework.orm.hibernate5.HibernateTransactionManager改为org.springframework.orm.hibernate6.HibernateTransactionManager
修改后的配置片段:
<bean id="sessionFactory" class="org.springframework.orm.hibernate6.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="spring_mvc.entity" /> <property name="hibernateProperties"> <props> <prop key="current_session_context_class">thread</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate6.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
2. 验证实体类配置
你的Employee实体类注解配置正确:
- 标注了
@Entity和@Table注解 - 使用了Jakarta EE的
jakarta.persistence.*包下的注解(适配Spring 6和Hibernate 6的要求) - 包路径
spring_mvc.entity与配置文件中的packagesToScan一致,无拼写错误
3. 清理并重新构建项目
执行Maven命令清理旧的编译文件并重新构建,确保实体类的注解被正确处理:
mvn clean install
4. 检查HQL语法
你的HQL语句from Employee写法正确,HQL使用实体类名称(区分大小写)而非数据库表名,此处无问题。
内容的提问来源于stack exchange,提问作者Tima Khamza
相关产品推荐
相关产品推荐

