Tomcat部署应用新版本遇Hibernate MappingException求助
解决Hibernate MappingException: persistent class not known问题
问题分析
异常核心是Hibernate构建SessionFactory时,仍在尝试加载已被移除的持久化类com.mikegrep.TwitterModel.PublicMetrics,说明应用中还存在该类的映射残留,或者缓存未清理干净。
解决方案
1. 彻底清理Tomcat部署环境
- 停止Tomcat服务
- 删除
Tomcat安装目录/webapps下目标应用的war包及解压后的文件夹 - 删除
Tomcat安装目录/work/Catalina/localhost下对应应用的所有缓存文件 - 删除
Tomcat安装目录/temp下的全部临时文件
2. 排查代码与配置的残留引用
- 全局搜索项目所有文件,确认:
- 无任何实体类残留
@OneToOne关联到PublicMetrics的注解 PublicMetrics类已完全移除@Entity等JPA持久化注解persistence.xml或Spring JPA配置(如application.properties/application.yml)中未将该类加入持久化单元- 无遗留的
.hbm.xml映射文件定义PublicMetrics的持久化配置
- 无任何实体类残留
3. 清除Hibernate缓存
- 若项目启用了Hibernate二级缓存,临时关闭该配置(如在
application.properties中设置spring.jpa.properties.hibernate.cache.use_second_level_cache=false) - 若使用了第三方缓存提供商(如Ehcache),删除对应的缓存文件或配置缓存过期
4. 重新构建并部署
- 执行项目构建命令(Maven项目用
mvn clean install,Gradle项目用gradle clean build),确保编译生成的class文件为最新版本 - 将新构建的war包部署到清理后的Tomcat目录,启动服务
异常栈信息
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: persistent class not known: com.mikegrep.TwitterModel.PublicMetrics at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ... 25 more Caused by: org.hibernate.MappingException: persistent class not known: com.mikegrep.TwitterModel.PublicMetrics at org.hibernate.boot.internal.MetadataImpl.getIdentifierType(MetadataImpl.java:427) at org.hibernate.type.EntityType.getIdentifierType(EntityType.java:603) at org.hibernate.type.EntityType.getIdentifierOrUniqueKeyType(EntityType.java:643) at org.hibernate.persister.entity.AbstractPropertyMapping.initIdentifierPropertyPaths(AbstractPropertyMapping.java:396) at org.hibernate.persister.entity.AbstractPropertyMapping.initPropertyPaths(AbstractPropertyMapping.java:365) at org.hibernate.persister.entity.AbstractEntityPersister.initOrdinaryPropertyPaths(AbstractEntityPersister.java:2629) at org.hibernate.persister.entity.AbstractEntityPersister.initPropertyPaths(AbstractEntityPersister.java:2676) at org.hibernate.persister.entity.AbstractEntityPersister.postConstruct(AbstractEntityPersister.java:4344) at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:449) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:181) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:319) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
内容的提问来源于stack exchange,提问作者mikegrep
相关产品推荐
相关产品推荐

