Hi Andrus, happy new year! The stuff in 4.2 is really promising, look forward to trying it out. But yeah, going the ValueObjectType route for now :).
Thanks! - hugi > On 4 Jan 2021, at 10:54, Andrus Adamchik <and...@objectstyle.org> wrote: > > Hi Hugi, > > FWIW, we are in the process of solving this exact problem of detecting > changes in a complex value object for Cayenne's own JSON type available since > 4.2: > > https://github.com/apache/cayenne/pull/443 > <https://github.com/apache/cayenne/pull/443> > > In our case we had to do something even worse - parse a serialized JSON > String to JSON to do semantic comparison to detect all possible invariants. > > In your case a custom ValueObjectType is the way to go. You can simply > implement a proper "equals" method in your object, and provide a > ValueObjectType that will do (de)serialization. It will only be called when > and if needed (i.e. when a change is detected by the "equals" method). This > is actually a good solution that is going to perform faster than the above. > > Andrus > > >> On Jan 3, 2021, at 10:32 PM, Hugi Thordarson <h...@karlmenn.is> wrote: >> >> Hi all, >> I've got a text column containing an object (or rather; an object structure) >> that's been serialized to a JSON string. I'm currently just re-serializing >> every time I change something—not very nice— so I'd like to do >> something…nicer. I.e. preferably, cayenne would know that something within >> the structure has changed, and take care of re-serializing for me (or let me >> know I need to re-serialize before commit). >> I could re-serialize everything before every commit, but for performance >> reasons I'd prefer to perform re-serialization only if the structure has >> actually changed. >> >> First thought was creating a custom ValueObjectType and just model the type >> directly, but it seems like a bit of an overkill. Or perhaps it's not? >> >> Grateful for any suggestions. >> >> Cheers, >> - hugi