[
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