无法在GlassFish上运行/部署项目,SessionFactory创建失败
从你提供的日志来看,核心错误是:
Severe: Initial SessionFactory creation failed.java.lang.NoSuchMethodError: org.hibernate.cfg.AnnotationConfiguration.getEventListeners()Lorg/hibernate/event/EventListeners;
这个错误几乎都是Hibernate版本冲突或者API使用过时导致的,结合你用的Hibernate Core 4.3.1.Final,给你几个针对性的解决步骤:
统一Hibernate依赖版本
你的项目里可能混合了不同版本的Hibernate相关jar包(比如同时存在3.x和4.x的依赖)。Hibernate 4.x已经对AnnotationConfiguration做了整合,旧版本的jar会和新版本的API产生冲突。请确保所有Hibernate依赖(core、commons annotations、entitymanager等)都使用同一大版本(比如全部用4.3.1.Final),清理掉项目中所有不属于这个版本的Hibernate相关jar。替换过时的AnnotationConfiguration
在你的SessionFactory创建代码里,如果你还在使用new AnnotationConfiguration()来加载配置,赶紧换成new Configuration()。Hibernate 4.x之后,注解配置的功能已经合并到Configuration类中,AnnotationConfiguration被废弃,继续使用它会导致找不到对应方法的错误。处理GlassFish自带的Hibernate冲突
GlassFish服务器本身可能内置了旧版本的Hibernate库,和你项目打包的新版本冲突。你可以:- 确认项目的
WEB-INF/lib下包含了完整的、兼容的Hibernate依赖包,确保项目优先加载自身的库; - 或者修改GlassFish的域配置文件(
domain.xml),找到自带的Hibernate相关模块并注释掉,强制使用项目内的依赖。
- 确认项目的
清理并重新构建项目
清理项目的构建目录(比如Maven的target、Gradle的build),重新执行构建命令,确保没有残留的旧版本jar包。部署前检查WEB-INF/lib目录,确认所有依赖都是你需要的版本,没有多余的冲突文件。
内容的提问来源于stack exchange,提问作者Bank Islami

