[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
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=noveltix.com; s=google; h=x-received:content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer; bh=lEmMJmrZzccxhdEI/l+gjusp2/PQOLy8X+js8jsMksE=; b=W+FsVmqMNiQUvLABrBJnF12QxgwiQXtzbE2dQ+GjFSA16zyw9AKKEcnzRzOAuF5WUJ 4hISZR/gebfhd4msxnDMD5ZZ0Kl4e3O+MCNXWmILx2EhvqJ9GNFn4rLkI4swT8JxeVEG +vcQ2UANSljOY1Gv/W8NFFjPpImE2tda5BABk=
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