Right. Currently, I am planning to just set it via a PK property setter (and very likely, the actual value will be generated and passed from the browser). Modeler-supported version will be a Cayenne PK generator mostly invisible to the code.
A. > On Aug 23, 2024, at 10:42 PM, Michael Gentry <blackn...@gmail.com> wrote: > > 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 >>>>>>> >>>>>>> >>>>> >>>>> >>> >> >>