Hibernate SaveOrUpdate на большом связанном графике - PullRequest
0 голосов
/ 26 марта 2012

У меня есть большой взаимосвязанный граф сущностей (около 1,2 тыс.).При попытке сохранить JVM выдает ошибку stackOverflowError (ниже).Классы Entity / Orm используют каскад сохранения / обновления только в тех вершинах, которые соединяют узлы.При меньших размерах графиков каскад работает нормально, но при больших размерах он ломается.Может кто-нибудь предложить какую-нибудь документацию или дать представление о возможных ограничениях в Hibernate?

Зависимости:

  • Hibernate 4.0.1
  • HyperSQL 2.2

Пример:

-Node_1

---- leaf_a => Узел_2

         ----leaf_c => node_4

---- leaf_b => Узел_3

          ----leaf_d => node_5

Ошибка JVM:

java.lang.StackOverflowError at java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:768) в org.hibernate.service.internal.AbstractServiceRegistryIerBervice (): 114) в org.hibernate.service.internal.AbstractServiceRegistryImpl.locateServiceBinding (AbstractServiceRegistryImpl.java:109) в org.hibernate.service.internal.AbstractServiceRegistryImpl.getService (AbstractServiceRejternal.lg.lg.jiber.eventListenerGroup (SessionImpl.java:624) в org.hibernate.internal.SessionImpl.listeners (SessionImpl.java:620) в org.hibernate.internal.SessionImpl.fireSaveOrUpdate (SessionImpl.java:614) в org.hibernate.internal.SessionImpl.saveOrUpdate (SessionImpl.java:608) в org.hibernate.engine.spi.CascadingAction $ 5.cascade (CascadingAction.java:25h). org или.engine.internal.Cascade.cascadeToOne (Cascade.java:380) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:323) в org.hibernate.engine.internal.Cascade.cascadeProperty (Каскад.java:208) в org.hibernate.engine.internal.Cascade.cascade (Cascade.java:165) в 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) в орг.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate (DefaultSaveOrUpdateEventListener.java:90) в org.hibernate.internal.15j.Imp.SessionImpl.saveOrUpdate (SessionImpl.java:608) в org.hibernate.engine.spi.CascadingAction $ 5.cascade (CascadingAction.java:258) в org.hibernate.engine.internal.Cascade.cascadeToOne (Cascade.java3: 3)org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:323) в org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) в org.hibernate.engine.internal.Cascade.cascadeCollectionEmentsCascade.java:409) в org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в 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) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate (DefaultSaveOrUpdateEventListener.java:36hatete.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) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:323) в 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) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascade (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) в орг.hibernate.) в 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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409)в org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в 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) в 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.DefaultSaveOrUpdateEventLrWate_EventUeTate_Server.Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_Event_de.internal.) в 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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409) в org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) в org.hiber.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) в org.hibernate.engine.internal.Cascade.cascade (Каскад.java: 165)в 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) в 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) в org.hibernate.engine.internal.Cascade.cascade (Cascade.java:165) в 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) в 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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409) в org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в 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) в 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.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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409) в org.hibernate.engine.internal.Cascade.cascadeClection(Cascade.java:350) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) в org.hibernate.Движок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ше.lip.lI.saveOrUpdate (SessionImpl.java:608) в org.hibernate.engine.spi.CascadingAction $ 5.cascade (CascadingAction.java:258) в org.hibernate.engine.internal.Cascade.cascadeToOne (Cascade.java:380 at).hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:323) в org.hibernate.engine.internal.Cascade.cascadeProperty (Cascade.java:208) в org.hibernate.engine.internal.Cascade.cascade (Каскад.java: 165) в org.hibernate.engine.internal.Cascade.cascade (Cascade.java:132) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate (DefaultSaveOrUpdateEventListener.je .36).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.fireSaveOrUpdate (SessionImpl.java:615) в org.hibernate.internal.SessionImpl.saveOrUpdate (SessionImpl.java:608) в org.hibernate.engine.spi.casgine $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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409) в org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:3) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в 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) по адресу org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate (DefaultSaveOrUpdateEventListener.java:36t ).Up.(DefaultSaveOrUpdateEventListener.java:335) по адресу org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached (DefaultSaveOrUpdateEventListener.java:239) по адресу org.hibernate.eventdateeRateWerEvate_RuTer_OpDUpDWR_WD_WD_WD_WD_WD_WD_WD_Ru_Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.Ru.SuTe_Up_Lu.Server.Ru.Ru.TyTe_SyTe_Sever_event_event_event_event_vent_event_event_event_event_event_Ivent_IventSevent_efв org.hibernate.event.: 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) в org.hibernate.engine.internal.Cascade.cascadeCollectionElements (Cascade.java:409)org.hibernate.engine.internal.Cascade.cascadeCollection (Cascade.java:350) в org.hibernate.engine.internal.Cascade.cascadeAssociation (Cascade.java:326) в 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) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate (DefaultSaveOrUpdateEventListener.java:361) в org.hibernate.event.internal.DefaultSaveertev.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.casade.(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) в org.hibernate.engine.internal.Cascade.cascade (Cascade.java:165) в org.hibernate,: 335) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached (DefaultSaveOrUpdateEventListener.java:239) в org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.jp_OuWeOUp_OuWeOUpDWD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_OuD_We_WeUp_D_WeUp_D_WeUp_D_W_W_D_W_W_D_W_D_W_D_W_W_P_W_P_W_P_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_02_1_0_1_0_1))).

1 Ответ

1 голос
/ 26 марта 2012

Если каскад работает для небольших графов, мне кажется, что проблема связана с тем, что рекурсивный стек постоянных данных слишком глубок и является переполнением стека (одна из наиболее распространенных причин переполнения стека - это рекурсия, которая не завершается, ноЭто также может произойти, если у вас действительно подлинный стек глубокой рекурсии.

Проверьте ответ здесь: Переполнение стека из глубокой рекурсии в 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...