2012-02-14 79 views
1

是否有Hibernate 4版本org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener当使用Spring 3.1和休眠4时替代IdTransferringMergeEventListener 4

我试图将我的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

它看起来像类移到org.hibernate.event.internal.DefaultMergeEventListener

+0

是啊,所以我想我可以创建自己的类,从3.0.x的复制泉IdTransferringMergeEventListener类,但采用了新的Hibernate 4类DefaultMergeEventListener。我很惊讶Spring虽然没有创建Hibernate 4兼容版本。不知道它是一个疏忽还是它的功能是由另一个机制处理的。 – Josh 2012-02-22 16:12:21

3

春季人们决定不再在春季实施这一对Hibernate 4

从错误报告:https://jira.springsource.org/browse/SPR-9634

我们特意让Spring的Hibernate的4支持相当小,以便保持接近原生Hibernate 4种做事方式。因此,我们没有计划重新引入IdTransferringMergeEventListener或我们以前的任何LOB用户类型,它们都是专用类来解决Hibernate应该真正解决的问题 - 因为它们与Spring无关并且导致重复维护令人头疼的一面。

当然,您可以基于Spring的旧版IdTransferringMergeEventListener创建自己的版本。但是请注意,在Hibernate 4中,事件监听器的注册方式已经发生了变化:这在每个SessionFactory级别上都是不可能的,因此Spring在它的LocalSessionFactoryBean中也不支持。有关详细信息,请查看相应的Hibernate文档以及Hibernate JIRA上的相应报告。

克林斯曼