【问题标题】:java.lang.NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory - When upgrading from spring 3 to spring 4java.lang.NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory - 从 spring 3 升级到 spring 4 时
【发布时间】:2015-06-30 04:06:21
【问题描述】:

我正在将我的 spring 项目从 3.0.5 更新到 4.0.3。

一切正常,但在启动时,当 spring 尝试创建 bean 时,我遇到了以下错误消息:

该类当然不存在于 ehcache-core、hibernate-ehcache 或 hibernate-core 中。事实上,spi 包似乎并不存在于任何地方。但是,我检查了 maven 依赖项,似乎 spring 4.0.3 和 hibernate 3.6.10 应该完全兼容。在我的 pom 中,我直接依赖 hibernate-ehcache,它会自动引入适当版本的 ehcache-core(显然已经完成),如下所示:

我的依赖看起来像:

我已对该错误进行了广泛的搜索,但只能找到几个对它的引用。鉴于它晦涩难懂,我猜它是我项目中某个地方的配置,它引用了这个 RegionFactory 类,但是,尽管进行了很多搜索,但我找不到任何东西。

有什么想法可以让我用 spring 4.0.3 构建这个项目吗?

我可以提供您需要的任何其他数据。

关键是要让项目针对 Spring 4.0.3.Release 构建。无论是什么版本的hibernate 或ehcache 都能让我做到这一点并不重要。显然,我的偏好将是 pom 更改而不是重新配置而不是更改代码......但我会在这一点上采取我能得到的。

编辑: 我正在尝试避免将我的休眠更新到 4.xy,因为这个项目非常大并且非常广泛地使用 HibernateDaoSupport 和 HibernateTemplate(成千上万的独立用法需要很长时间才能重构)

【问题讨论】:

  • 试试hibernate版本4.0.1.FINAL,你尝试使用的类好像已经添加到4.0.0
  • 你的依赖有点乱。您将 Spring 1.2.9 和 4.0.3 以及 Spring Security 3.2.0 与旧的 acegi 安全性混合使用。我也非常怀疑 Spring Modules 是否仍在使用新版本的 Spring(该项目已经过时并且被遗弃了很长一段时间)。你能发布你的休眠和​​缓存配置吗?
  • @M.Deinum 没有参数。这是一个遗留项目,有很多技术债务。我认为其中很多甚至都没有使用(尽管弹簧安全是故意的)。我会尽快发布额外的信息。谢谢。
  • @Paul,现在也有同样的问题。你是怎么解决的?
  • @StasKolodyuk 我现在很难记住,但我相信最后我需要使用更新版本的休眠 - 并且通过扩展 Eh-cache - 对我来说这是一个巨大的麻烦(因为非常广泛地使用了较新版本的 hibernate 不支持的 hibernate 模板,以及使更新变得困难的交织的会话管理代码),但希望对您来说这只是一个简单的 POM 更改!

标签: java spring hibernate maven spring-mvc


【解决方案1】:

更新休眠版本。

在 Hibernate 版本 4.0.0.Final 之后,他们从 RegionFactory 更改包。

3.6.10.决赛: org.hibernate.cache.RegionFactory 4.0.0.最终: org.hibernate.cache.spi.RegionFactory.

【讨论】:

  • 我试图避免将我的 Hibernate 版本更新到 4.x.y 之后,因为此升级破坏了该项目非常广泛使用的 HibernateDaoSupport。该文档似乎暗示它适用于休眠 3.6.10.Final?
  • HibernateDaoSupport 没有中断。使用 Hibernate 4.x.y 有一个类 org.springframework.orm.hibernate4.support.HibernateDaoSupport。
  • 据我所知,HibernateTemplate 在 Spring 4 中不存在?尽量避免代码更改。
  • Spring 4.x.y 有一个 HibernateDaoSupport 见这里:docs.spring.io/autorepo/docs/spring/4.0.3.RELEASE/javadoc-api/…
  • 是的,但没有 HibernateTemplate,我们在代码中引用了数千次。除了对遗留代码进行 1000 次更改之外,任何替代方法都是可取的。
猜你喜欢
  • 2015-10-28
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多