2012-03-26 85 views
0

我有一個實體大型互連圖(約1.2k)。當試圖保存時,JVM拋出一個stackOverflowError(見下文)。實體/ orm類僅在連接節點的頂點上使用保存/更新級聯。在較小的圖形尺寸上,級聯可以正常工作,但尺寸較大時會中斷。有人可以提供一些文檔或提供有關Hibernate可能的限制的任何洞察?大型連接圖上的休眠SaveOrUpdate

依賴關係:

  • 休眠4.0.1
  • 的HyperSQL 2.2

實施例:

-Node_1

---- leaf_a => Node_2

  ----leaf_c => node_4 

---- leaf_b => Node_3上

  ----leaf_d => node_5 

JVM錯誤:在java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)

java.lang.StackOverflowError的 在org.hibernate.service.internal.AbstractServiceRegistryImpl.locateServiceBinding(AbstractServiceRegistryImpl.java:114) 在org.hibernate.service.internal.AbstractServiceRegistryImpl.locateServiceBinding(AbstractServiceRegistryImpl.java:109) 在org.hibernate.service.internal.AbstractSer viceRegistryImpl.getService(AbstractServiceRegistryImpl.java:124) 在org.hibernate.internal.SessionImpl.eventListenerGroup(SessionImpl.java:624) 在org.hibernate.internal.SessionImpl.listeners(SessionImpl.java:620) 在有機hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:614) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java :258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine .internal.Cascade.cascadeProperty(Cascade.java:208) 在org.hibernate.engine.internal。 Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveO rUpdate(SessionImpl.java:615) 在org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) 在org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) 在組織.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) 在org.hibernate.engine.internal.Cascade.cascadeAssociation(級聯。java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409) at org.hibernate。 engine.internal.Cascade.cascadeCollection(Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade。 java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate。 event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) at org.hibernate.event.internal.DefaultSaveOr UpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) 在org.hibernate.internal.SessionImpl.saveOrUpdate( SessionImpl.java:608) 在org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) 在org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal。 Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(默認aveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) 在org.hibernate作爲。 internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java :380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine .internal.Cascade.cascadeCollectionElements(Cascade.java:409) at org .hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) 在org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) 在org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) 在有機.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached (DefaultSaveOrUpdateEventListener.java:239) at org。hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl。 Java的:615) 在org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) 在org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) 在org.hibernate.engine .internal.Cascade.cascadeToOne(Cascade.java:380) 在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 在org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java :208) at org.hibernate.engine.internal.Casca de.cascadeCollectionElements(Cascade.java:409) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal。 Cascade.cascade(Cascade.java:132) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetach ED(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction .java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate .engine.internal.Cascade.cascadeProperty(CAS在org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org。 hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached( DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade (CascadingAction.java:258) 在org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) 在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 在有機.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409) at org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade。java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate。 engine.internal.Cascade.cascade(Cascade.java:132) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener。的java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate作爲。 Ë vent.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) 在org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal .Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409 ) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350)org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal。 Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(默認aveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) 在org.hibernate作爲。 internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java :380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine .oclass.Cascade.cascade(Cascade.java:165) at org.hibernate.engine。 internal.Cascade.cascade(Cascade.java:132) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java: 335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event。 internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) at org.hibernate.internal。SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380 ) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal .Cascade.cascadeCollectionElements(Cascade.java:409) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326 ) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cas cade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org.hibernate.internal.SessionImpl.fireSaveOrUp日期(SessionImpl.java:615) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org .hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) 在org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409) 在org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) 在有機.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(C在org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org。 hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached( DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:9 0) 在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) 在org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) 在org.hibernate.engine.spi.CascadingAction $ 5 (cascade.java:328) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade .cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener。cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) 在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) 在

回答

1

如果級聯正在爲小圖,將在我看來,這個問題是關係到遞歸一直存在堆疊在過深並且是stackoverflowing(stackoverflows最常見的原因之一是遞歸不會終止,但如果你有真正合法的dee也可能發生p遞歸棧。

檢查答案在這裏:Stack overflows from deep recursion in Java?選擇的答案提供了更改堆棧大小的詳細信息,但如果你希望大量的數據增長,那麼我想你需要考慮你的運行環境的要求,以及如何將規模。

-ss Stacksize to increase the native stack size or 

-oss Stacksize to increase the Java stack size, 

The default native stack size is 128k, with a minimum value of 1000 bytes. The default java stack size is 400k, with a minimum value of 1000 bytes. 
+0

嘿rhinds - 這絕對是一個合法的遞歸過程,因爲它是在級聯保存/更新操作期間由Hibernate執行的。我可以增加堆棧,它可以工作,所以也許它就這麼簡單。很想知道是否有其他人遇到或遇到過任何相關信息。感謝您的鏈接。乾杯, – 2012-03-26 15:26:38