2012-03-26 1 views
0

私は、エンティティの大きな相互グラフ(約1.2k)を持っています。保存しようとすると、JVMはstackOverflowError(以下)をスローします。エンティティ/ ormクラスはノードを接続する頂点に対してのみセーブ/更新カスケードを使用します。小さなグラフサイズでは、カスケードは正常に機能しますが、サイズが大きくなると破損します。誰かがいくつかのドキュメントを提案したり、Hibernateの可能性のある制限についての洞察を提供することはできますか?大きな接続グラフの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.AbstractSerでorg.hibernate.service.internal.AbstractServiceRegistryImpl.locateServiceBinding(AbstractServiceRegistryImpl.java:109)でorg.hibernate.service.internal.AbstractServiceRegistryImpl.locateServiceBinding(AbstractServiceRegistryImpl.java:114) でorg.hibernate.internal.SessionImpl.listenersでviceRegistryImpl.getService(AbstractServiceRegistryImpl.java:124)org.hibernate.internal.SessionImpl.eventListenerGroup(SessionImpl.java:624) で(SessionImpl.java:620)ORGで 。 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) 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でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) で。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) (org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSaveO rUpdate(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(カスケード。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。 (Cascade.java:326) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:326) にあるorg.hibernate.engine.internal.Cascade.cascadeAssociation 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 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) (DefaultSaveOrUpdateEventListener.java:109) org.hibernate.internal.SessionImpl.saveOrUpdateでorg.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) で( SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction $ 5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)(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でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) で。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(デフォルトorg.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615)org.hibernateで でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) でaveOrUpdateEventListener.java:109) 。 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.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) at org。hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)org.hibernate.internal.SessionImpl.fireSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) で (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:380) :208) at org.hibernate.engine.internal.Casca deCascadeCollectionElements(Cascade.java:409) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) (Cascade.java:208) org.hibernate.engine.internal.Cascade.cascadeProperty org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) でCascade.cascade(Cascade.java:132) (DefaultSaveOrUpdateEventListener.java:335) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetach org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) (DefaultSaveOrUpdateEventListener.java:90)でED(DefaultSaveOrUpdateEventListener.java:239) で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 cade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org。 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetachedでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) でhibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) ( org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) でDefaultSaveOrUpdateEventListener.java:239) (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(カスケード。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.performUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) で (DefaultSaveOrUpdateEventListener。ジャワ:org.hibernateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) (DefaultSaveOrUpdateEventListener.java:109) における335) 。 e org.hibernate.internal.SessionImpl.saveOrUpdateでorg.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) でvent.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) (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)(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でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) で。 DefaultSaveOrUpdateEventListener.performSaveOrUpdate(デフォルトorg.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615)org.hibernateで でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) でaveOrUpdateEventListener.java:109) 。 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.cascade(Cascade.java:165) at org.hibernate.engine。 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.javaでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) でinternal.Cascade.cascade(Cascade.java:132) : 335)org.hibernate.eventでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) で) 。 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でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) で。 org.hibernate.internal.SessionImpl.fireSaveOrUpでDefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)で date(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(C ascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org。 org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetachedでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) でhibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) ( org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdateでorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) (DefaultSaveOrUpdateEventListener.java:9でDefaultSaveOrUpdateEventListener.java:239) 0) 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) 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。org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:335) でcascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:361) でorg.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)

答えて

1

で カスケードは小さいグラフのために働いている場合は、問題は、再帰的に関係しているように私には思われるが深すぎているスタックpersistがスタックオーバーフロー(スタックオーバーフローの最も一般的な原因の1つは、終了しない再帰ですが、正当な正当な理由がある場合にも起こります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

これは、カスケードセーブ/アップデート操作中にHibernateによって実行されているので、間違いなく正当な再帰プロセスです。私はスタックを増やすことができ、それはおそらくそれだけで簡単です。他の誰かが遭遇したか、関連情報に遭遇したかどうかを知りたいと思った。リンクありがとう。乾杯、 –

関連する問題