Hi Andrus, Part of what I meant by adding UUID support to Cayenne was to include UUID as a PK mechanism in Cayenne modeler and provide a corresponding PK generator class. Nothing currently stops you from manually setting a UUID yourself, but including support in the modeler would be a more natural fit, I think.
Thanks, mrg On Fri, Aug 23, 2024 at 4:33 PM Andrus Adamchik <aadamc...@gmail.com> wrote: > I am actually glad we went on a tangent and started discussing UUIDs. I > just ran into a use-case of an idempotent PUT API endpoint that takes a mix > of new and existing objects, and there's no natural key in the entity to > check whether new (PK-less) objects are already in DB (so that we UPDATE > them instead of INSERT). UUID would come in handy in this situation :) > > (FWIW, the endpoint is running on Agrest with Cayenne underneath, and > Agrest is the layer that ensures idempotent semantics). > > Andrus > > > > On Aug 20, 2024, at 12:01 PM, Hugi Thordarson <h...@godurkodi.is> wrote: > > > > Judging from some very, very basic experimentation, Cayenne seems to do > fine with UUID PKs. > > > > Db generated UUIDs really just work like serial integers with a > different generated value type: > > > > > https://github.com/hugithordarson/xx-c42/blob/main/src/main/java/family/MainUUIDDbGenerated.java > > > > …and the fun stuff, app generated UUID PKs (for all your cross- back- > and forth-referencing insertion needs) look fine as well: > > > > > https://github.com/hugithordarson/xx-c42/blob/main/src/main/java/family/MainUUIDAppGenerated.java > > > > …although I wouldn't vouch for that PK-generation method of exposing the > PK and populating it in a post-add hook. > > > > Unfortunately h2 doesn't appear to support deferred constraints, but I > tested this against postgres with the constraints present. > > > > Anyway, pardon this tangent, born from a joke. I won't really say this > really demonstrates much, but it was at least a fun experiment over lunch > and thought you might enjoy it:). > > > > Cheers, > > - hugi > > > > > >> On 16 Aug 2024, at 17:26, Michael Gentry <blackn...@gmail.com> wrote: > >> > >> If UUID PKs are really going to be a thing, we should probably add them > to > >> Cayenne... > >> > >> > >> On Fri, Aug 16, 2024 at 9:44 AM Hugi Thordarson <h...@godurkodi.is> > wrote: > >> > >>> Hi Michael! > >>> > >>> Sure, the UUID comment was meant as a bad joke, my world is all DB > >>> generated integer keys. > >>> > >>> That being said, I've wanted to try out UUID keys for a while. Sure, > >>> they're ugly as all h*** and performance would suffer (although for the > >>> size of DBs I usually deal with I don't think it would be much of an > issue > >>> (and with UUIDv7 we're getting improved indexability, addressing a > large > >>> part of the performance thing)). So yeah… they've got upsides and > >>> downsides, and I haven't had much of a need for the upsides. But I've > got a > >>> suspicion they might sneak into common use soon. Perhaps when > >>> openai.com/gptbot <http://openai.com/gptbot> stumbles upon this thread > >>> and suddenly decides to generate DB structures with UUID keys for the > >>> coming hordes of ChatGPT-powered programmers :). > >>> > >>> Cheers, > >>> - hugi > >>> > >>> > >>>> On 16 Aug 2024, at 14:20, Michael Gentry <blackn...@gmail.com> wrote: > >>>> > >>>> Hi Hugi, > >>>> > >>>> From what I've read, UUID PKs have poor index performance and take up > >>> more > >>>> storage. > >>>> > >>>> Wouldn't it be better to use an integer sequence like PostgreSQL and > >>> Oracle > >>>> support? You can generate your PKs up front and Cayenne already knows > how > >>>> to deal with them. > >>>> > >>>> Thanks, > >>>> mrg > >>>> > >>>> > >>>> On Thu, Aug 15, 2024 at 6:49 AM Hugi Thordarson <h...@godurkodi.is> > >>> wrote: > >>>> > >>>>> Hi Nikita, > >>>>> > >>>>> again, thanks for looking into this! And yeah, totally understand how > >>>>> we're not about to insert everything in one commit. Well, at least > until > >>>>> the universe decides it's time everyone move to app generated UUID > PKs > >>> and > >>>>> deferred constraint checks :). > >>>>> > >>>>> Cheers, > >>>>> - hugi > >>>>> > >>>>> > >>>>> > >>>>>> On 14 Aug 2024, at 11:27, Nikita Timofeev < > ntimof...@objectstyle.com> > >>>>> wrote: > >>>>>> > >>>>>> In this case it seems like a true cycle, the Person entity has two > >>>>>> relationships to self. And that particular case Cayenne didn't > handle > >>>>> well > >>>>>> historically. > >>>>>> But looking at it, I want to try and tweak the new Graph-based > sorter, > >>>>>> because two updates generated shouldn't depend on each other. So > maybe > >>> it > >>>>>> could be fixed now. > >>>>>> It still won't be able to insert all the data in one go though. > >>>>>> > >>>>>> On Wed, Aug 14, 2024 at 11:33 AM Hugi Thordarson <h...@godurkodi.is > > > >>>>> wrote: > >>>>>> > >>>>>>> Hi again Nikita! > >>>>>>> > >>>>>>> saw the fix you made yesterday and it works great for the test I > >>>>> created, > >>>>>>> so thanks for that! > >>>>>>> > >>>>>>> However, turns out that for the more complex case in our actual > >>> project, > >>>>>>> the operation still fails. > >>>>>>> I've added a new example to the test project that models that case > a > >>>>>>> little more closely: > >>>>>>> > >>>>>>> > >>>>>>> > >>>>> > >>> > https://github.com/hugithordarson/xx-c42/blob/main/src/main/java/family/MainWithAddedBackReference.java > >>>>>>> > >>>>>>> Any thoughts? > >>>>>>> > >>>>>>> Cheers, > >>>>>>> - hugi > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>> On 12 Aug 2024, at 13:52, Nikita Timofeev < > ntimof...@objectstyle.com > >>>> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> Hi Hugi, > >>>>>>>> > >>>>>>>> Thanks for the perfect example, that's always my main problem. > >>>>>>>> I've found the issue with the new flush logic [1]. The last > operation > >>>>>>>> creates two logical changes (DbRowOps), and one of them is later > >>>>>>> discarded > >>>>>>>> as there's nothing to flush to the DB. > >>>>>>>> However it's discarded only after the sorting, so it fails. > >>>>>>>> I'm already testing a fix for that. > >>>>>>>> > >>>>>>>> Also wanted to mention that in this exact case > >>> GraphBasedDbRowOpSorter > >>>>>>>> helps, as it checks operation internals and ignores it. > >>>>>>>> > >>>>>>>> [1] https://issues.apache.org/jira/browse/CAY-2866 > >>>>>>>> > >>>>>>>> On Fri, Aug 9, 2024 at 12:58 PM Hugi Thordarson < > h...@godurkodi.is> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi Andrus, > >>>>>>>>> I've been taking a look at this with Maik, here's a runnable > example > >>>>>>>>> project containing a commit that works on v4.1 but fails in v4.2: > >>>>>>>>> > >>>>>>>>> https://github.com/hugithordarson/xx-c42/ > >>>>>>>>> > >>>>>>>>> Quick link to the code actually demonstrating the failure: > >>>>>>>>> > >>>>>>>>> > >>>>>>> > >>>>> > >>> > https://github.com/hugithordarson/xx-c42/blob/main/src/main/java/family/Main.java > >>>>>>>>> > >>>>>>>>> The last commit certainly results in a circular reference being > >>>>> present > >>>>>>> in > >>>>>>>>> the object graph, but it probably shouldn't be a problem for the > >>>>> actual > >>>>>>>>> operation since we're only updating a single row, right? > >>>>>>>>> > >>>>>>>>> Cheers, > >>>>>>>>> - hugi > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>> On 8 Aug 2024, at 18:10, Andrus Adamchik <aadamc...@gmail.com> > >>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> Hi Maik, > >>>>>>>>>> > >>>>>>>>>> Could you provide an example of a failing graph? > >>>>>>>>>> > >>>>>>>>>> Thanks, > >>>>>>>>>> Andrus > >>>>>>>>>> > >>>>>>>>>>> On Aug 7, 2024, at 7:31 AM, Maik Musall <m...@selbstdenker.ag> > >>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>> Hi everyone, > >>>>>>>>>>> > >>>>>>>>>>> we upgraded an application from Cayenne 4.1.1 to 4.2.1, and now > >>>>> we’re > >>>>>>>>> getting more cyclic graph errors from AshwoodEntitySorter. Years > >>> back > >>>>> we > >>>>>>>>> already had a similar problem, but @SortWeight didn’t help and > >>>>>>>>> GraphBasedDbRowOpSorter wasn’t ready. The latter is now in 4.2 > >>> stable > >>>>>>> but > >>>>>>>>> fails to save even simpler graphs, so unfortunately not a > solution. > >>> We > >>>>>>> had > >>>>>>>>> been able to get stable operation by fetching PK’s from > PostgreSQL > >>>>>>>>> sequences (Oracle-style) instead of having Cayenne generate them, > >>> and > >>>>>>> lived > >>>>>>>>> with the performance penalty associated with that, but the > problem > >>>>> came > >>>>>>>>> back with 4.2 despite that. Not reliably reproducible though, > >>> happens > >>>>>>> every > >>>>>>>>> now and then. Any thoughts? > >>>>>>>>>>> > >>>>>>>>>>> Thanks > >>>>>>>>>>> Maik > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> Best regards, > >>>>>>>> Nikita Timofeev > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> Best regards, > >>>>>> Nikita Timofeev > >>>>> > >>>>> > >>> > >>> > > > >