[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Order of persist operations

Marcin, 

if I put flush() after each persist() it will work of course but will take too much time for lot of records. 
What I need to do is to persist many records in the specified order in one transaction. 
So far eclipselink fails to support that scenario  :(

Regards, 
Deyan 


On Jan 17, 2013, at 14:43 , Marcin Kwapisz <mkwapisz@xxxxxxxxxxxxx> wrote:

W dniu 2013-01-17 12:27, Deyan Tsvetanov pisze:
> Well, the order that EclipseLink chooses is RANDOM :)
> It is a fairly simple example, only 1 entity with only 1 column. 
> I'd really expect that the INSERT statements are executed in same order as the persist() calls. 
> 
> My real-life use case is importing data from an XML file into the database. 
> There are relations and FKs in my database and when exported and re-imported the order of the XML entries, persist() calls and INSERT statements is critical. 
> EclipseLink basically inserts each XML entry randomly. Currently the only workaround is to flush after each persist call. It could work for few hundred calls, 
> but not for few thousand. 
> 
> JPA says nothing about the order of the database operations. When writing the spec they probably have assumed that it would be logical to execute the database operations in the
> same order as the persist() or merge() calls. 
> This is not the case of mixed remove(), persist() and merge() calls, in our case we have only persist() calls and the case is very simple. 
> 
> Best regards, 
> Deyan 
> 
> 
em.persist() places INSERT query in the cache.
em.getTransaction().commit() flushes the cache and the order of INSERTs is the same as in the cache (I think, I do not know how eclipselink is implemented). 
Try to place em.flush after persist

Regards
Marcin
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users