Since you are already at the DB level (outside of cayenne) making this change, I would just use a BEFORE UPDATE row-level trigger in Postgres. You can change the value there.
Something like this would work: CREATE OR REPLACE FUNCTION company_default() RETURNS trigger AS $$ BEGIN NEW.company = coalesce(NEW.company, <some default>); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER mytable_update BEFORE UPDATE ON MyTable FOR EACH ROW WHEN (NEW.company IS NULL) EXECUTE FUNCTION company_default(); On Tue, Sep 8, 2020 at 3:13 PM Hugi Thordarson <h...@karlmenn.is> wrote: > Working with old DB designs really results in the weirdest questions… > > So… I've been working around a design problem in a customer DB by using my > own BatchTranslatorFactory. The functionality was that if a column is > called "company", every update wraps the column's new value in a coalesce > function to ensure that it's never set to null (for… reasons). This has > worked great as a workaround for our problem. > > However, SQL generation in Cayenne 4.2 is all new so my current solution ( > https://gist.github.com/hugith/a33a20fc7da7fd8f709f59ce3a30a96a < > https://gist.github.com/hugith/a33a20fc7da7fd8f709f59ce3a30a96a> ) > doesn't really port. > Before I start considering migration to 4.2, is this possible to do there? > Or should I just bite the bullet and start fixing up that bloody DB before > upgrading? > > Cheers, > - hugi