[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [eclipselink-users] Order of persist operations
- From: Deyan Tsvetanov <deyan@xxxxxxxxxxxx>
- Date: Thu, 17 Jan 2013 14:45:53 +0200
- Delivered-to: firstname.lastname@example.org
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 :(
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,
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
eclipselink-users mailing list