我将我的hibernate从版本3更新为5,并且在我的应用程序上下文中我有以下bean
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:mappingResources="standard.hbm.xml">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
</entry>
</map>
</property>
</bean>
问题在于休眠5我没有EventListners,也没有IdTransferringMergeEventListener。我需要这个吗?我怎样才能更换?
答案 0 :(得分:0)
来自api IdTransferringMergeEventListener
扩展Hibernate的DefaultMergeEventListener,传输 新保存的对象的id到相应的原始对象(即 是传递给合并方法的分离对象图的一部分。)
因此,如果您未在项目中使用此功能,则可以跳过它。如果需要,可以复制监听器并注册一个。我认为DefaultMergeEventListener的方法onMerge(MergeEvent event, Map copiedAlready)
支持旧的IdTransferringMergeEventListener
我们故意将Spring的Hibernate 4支持保持在最低限度 为了保持接近原生Hibernate 4种做事方式。如 结果,我们没有计划重新引入 IdTransferringMergeEventListener或我们以前的任何LOB用户类型, 所有这些都是专门用于解决问题的课程 Hibernate应该真正解决自己 - 因为它们无关 与Spring一起在Spring上引起反复的维护问题 侧。
您可以根据Spring的版本自由创建自己的版本 当然,IdTransferringMergeEventListener 。不过,请注意 Hibernate 4中可以注册事件监听器的方式已经改变: 因此,在每个SessionFactory级别上这是不可能的 Spring也无法在其LocalSessionFactoryBean中支持。检查 相应的Hibernate文档和相应的报告 Hibernate JIRA了解详情。