Hi Anthonin, Perhaps put a @SortWeight(2) annotation [1] on your child entity? Also, you need to configure a different entity sorter:
// Need WeightedAshwoodEntitySorter for @SortWeight to work. Module entitySorterModule = (binder) -> binder.bind(EntitySorter.class).to(WeightedAshwoodEntitySorter.class); ServerRuntime runtime = ServerRuntimeBuilder.builder().addModule(myModule).... If this doesn't help, please provide a stack track and Cayenne version information. Thanks! mrg [1] https://cayenne.apache.org/docs/4.0/api/org/apache/cayenne/ashwood/SortWeight.html On Thu, Nov 4, 2021 at 10:38 AM Lize Anthonin (OceanOPS) <al...@groupcls.com> wrote: > Hi, > > I am using Cayenne in a web app (through AgRest, but this is purely > cayenne related, well I think so) that contains one service through a POST > method. > Basically, I submit a JSON body with multiple object in it, pass it > through the service method defined below, process each object and for each > ones doing some insert into an Oracle DB. > @POST > @Consumes(MediaType.APPLICATION_JSON) > @Path("getid") > @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") > public List<IdResponse> getID(final List<IdInput> inputs) > { > There I loop over this list, process the object IdInput > and make the necessary insertions > } > > My issue there is that when I commit the changes, the order of the inserts > seems to fail randomly, from one request to another. I have relationships > set in those modifications, and through the logs I can see the PK being > fetched from the sequences, but then sometimes (most of the times) the > referencing entity is inserted before the referenced entity. And of course > the commit fail for violation of parent key. > > I've tried to secure as much as possible the context, through different > ways: > > * stateless thread context through the provided cayenne filter > (stateless because the session one would be committed via another commit > made in another filter, weird, but I send only one request, this filter > commit should happen prior to the 'service' commit) > * per method context > * custom stateless context through a filter that I made myself. > I thought I got it with he per method context, but it failed after a while. > And I tried committing after each processing in the loop, or after the > loop, but same results. > > I'm probably missing something, but I'm not getting why it happen > sometimes, not always(or never!). A threading issue maybe? But I'm > processing only one request, so I'm a bit lost. > Any thoughts? (before I commit after each insertion of entities haha) > How the order of inserts are defined? Maybe I miss-configured some > relationships in the modeler, but they come from a reverse engineering and > look ok... > > Many thanks in advance > Anthonin > ________________________________ > > Ce message et toutes les pi?ces jointes (ci-apr?s le "message") sont > ?tablis ? l'intention exclusive de ses destinataires et sont confidentiels. > Si vous recevez ce message par erreur ou s'il ne vous est pas destin?, > merci de le d?truire ainsi que toute copie de votre syst?me et d'en avertir > imm?diatement l'exp?diteur. Toute lecture non autoris?e, toute utilisation > de ce message qui n'est pas conforme ? sa destination, toute diffusion ou > toute publication, totale ou partielle, est interdite. L'Internet ne > permettant pas d'assurer l'int?grit? de ce message ?lectronique susceptible > d'alt?ration, l'exp?diteur (et ses filiales) d?cline(nt) toute > responsabilit? au titre de ce message dans l'hypoth?se o? il aurait ?t? > modifi? ou falsifi?. > > This message and any attachments (the "message") is intended solely for > the intended recipient(s) and is confidential. If you receive this message > in error, or are not the intended recipient(s), please delete it and any > copies from your systems and immediately notify the sender. Any > unauthorized view, use that does not comply with its purpose, dissemination > or disclosure, either whole or partial, is prohibited. Since the internet > cannot guarantee the integrity of this message which may not be reliable, > the sender (and its subsidiaries) shall not be liable for the message if > modified or falsified. >