3

是否有 Hibernate 4 版本org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener

我正在尝试将我的 Spring 3.0.x + Hibernate 3.6 应用程序升级到 Spring 3.1 + Hibernate 4,但似乎找不到如何更新它。

这在我的 applicationContext 中特别引用,如下所示:

<property name="eventListeners">
      <map>
        <entry key="merge">
          <bean
            class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
        </entry>
      </map>
</property>

保持原样会导致异常:

Caused by: java.lang.ClassNotFoundException: org.hibernate.event.def.DefaultMergeEventListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)

大概是因为 Hibernate 4 没有这个类DefaultMergeEventListener

提前致谢。

4

2 回答 2

6

看起来班级搬到了org.hibernate.event.internal.DefaultMergeEventListener

于 2012-02-15T11:16:22.653 回答
4

Spring 的人决定不为 Hibernate 4 实现这个

来自春季的错误报告:https ://jira.springsource.org/browse/SPR-9634

我们有意将 Spring 对 Hibernate 4 的支持保持在最低限度,以便接近原生的 Hibernate 4 做事方式。因此,我们没有计划重新引入 IdTransferringMergeEventListener 或任何我们以前的 LOB 用户类型,所有这些都是特殊用途的类,用于解决 Hibernate 真正应该自行解决的问题 - 因为它们与 Spring 无关并导致重复Spring 方面的维护令人头疼。

当然,您可以根据 Spring 的旧 IdTransferringMergeEventListener 自由创建自己的版本。但是,请注意,在 Hibernate 4 中注册事件监听器的方式已经改变:这在 per-SessionFactory 级别上不再可能,因此 Spring 也无法在其 LocalSessionFactoryBean 中支持。有关详细信息,请查看相应的 Hibernate 文档和有关 Hibernate JIRA 的相应报告。

于尔根

于 2012-08-21T19:02:06.130 回答