[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-2272) Serious performance problems when saving large amount of transient entities with collections of transient entities

Yves Galante (JIRA) noreply at atlassian.com
Wed Feb 27 17:04:33 EST 2008


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2272?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Yves Galante updated HHH-2272:
------------------------------

    Attachment: patchCascading.patch
                SaveTest.zip

New patch and test case for this JIRA

> Serious performance problems when saving large amount of transient entities with collections of transient entities
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-2272
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2272
>             Project: Hibernate3
>          Issue Type: Task
>          Components: core
>    Affects Versions: 3.2.0.ga
>         Environment: Hibernate 3.2.0 on Oracle 9.2
>            Reporter: Markus Heiden
>         Attachments: hack.patch, hibernate.zip, Number of call.jpg, patchCascading.patch, SaveTest.zip
>
>
> When saving many (e.g. 50000) transient entities with a collection of transient entities, for each collection element the whole persistence context is searched (by StatefulPersistenceContext#getIndexInOwner() and StatefulPersistenceContext#getOwnerId) and its even searched twice when the collection is an indexed collection. This leads to an enormous amount (> 1000000) of iterations over all entities and over all collection elements of each entity. Especially when one saves only the same type of entities this leads to times of hours(!) even on a fast machine before any insert statement is even issued. This issue is related to HHH-1612, but fixing issue HHH-1612 won't resolve this problem (I have explored this with a hack which fixes HHH-1612).
> In my eyes there are two ways to solve this problem:
> 1) When cascading the save of a parent, the parent cascade can fill the persistence context with information about its collection elements. E.g. before cascading the save to a collection a parent can add  a (child, parent) pair to a map in the persistence context to avoid the above described iterations. Then a simple Map#get() would be sufficient in most cases to get the parent.
> 2) When cascading, the parent has to be passed with the cascaded (e.g. saved) element. But this is no good solution, because it affects some well known hibernate apis.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list