2017-07-16 204 views
0

我更新我的Hibernate 3版5,我有我的應用程序方面,我有以下豆事件偵聽器5

<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

通過api IdTransferringMergeEventListener

擴展Hibernate的DefaultMergeEventListener的,新保存的對象的 IDS傳送到對應的原始對象( 是傳遞到合併方法分離的對象圖的一部分)。

所以,如果你不在項目中使用它,你可以跳過它。如果你需要它,你可以複製監聽器並註冊一個。我認爲DefaultMergeEventListener的方法onMerge(MergeEvent event, Map copiedAlready)支持舊的IdTransferringMergeEventListener

IdTransferringMergeEventListener extends org.hibernate.event.def.DefaultMergeEventListener, which has been moved to org.hibernate.event.internal.DefaultMergeEventListener它應該沒問題。

我們故意保留Spring的Hibernate 4支持,而不是最小的,在 爲了保持接近原生Hibernate 4的做事方式。作爲 因此,我們沒有計劃重新引入 IdTransferringMergeEventListener或任何我們以前的LOB用戶類型, 全部爲特殊用途類來解決問題,那 休眠真的應該自己解決 - 因爲他們什麼都沒有做 與春天一起,並在春天的 方面造成反覆的維護頭痛。

你自由了基於Spring的老 IdTransferringMergeEventListener創建,當然你自己的版本。但是請注意,在Hibernate 4中,可以註冊事件偵聽器的 方式已更改: 這不可能在每個SessionFactory級別上進行,因此 Spring在其LocalSessionFactoryBean中也不支持。有關詳細信息,請查閱 對應的Hibernate文檔以及有關 Hibernate JIRA的相應報告。

+0

這個事件監聽器用於什麼?也許我正在使用,但我不知道 – Maratona

+0

它將使用hibernt merge()方法創建的對象的標識符複製回原始對象。例如,當第一次使用merge(object)保存對象並且發起它時你調用getId()的結果爲null,監聽器id被合併到保存的對象中,並且你得到了真實的id。 – xyz

+0

所以是的,我正在使用...你可以指導我如何實現這個行爲嗎? – Maratona