Thou shall never ever change a primary key! Replace the compound PK with a “real” ID and be done. This is not such a big thing to do. I've done this several times. You need a bit of SQL to “fix” your database, but that is no rocket science.
This m:n join table is not a mere technical requirement anymore but now represents business logic so it really really should have its own dedicated primary key. At least that’s how I would do it. Good luck ---markus--- > On 11 Oct 2022, at 00:16, OCsite via Webobjects-dev > <webobjects-dev@lists.apple.com> wrote: > > Hi there, > > I've just bumped into a new problem. There's a table which, many years ago, > was created as an invisible M:N intermediate table. Later, we needed to add > some information to the relationship, so now we have a table, say, > Connection, which has > - a number of normal attributes > - a compound PK (department_id, user_id) which contains two FKs into two > other tables, say, User and Market (the remaining of the original M:N > intermediate) > - two :1 relationships to those two tables (user and market). > > Both User and Market tables model :N relationships connections (owning, > PK-propagating), which long long ago replaced the original flattened M:N > ones. Worked like a charm for years. > > Now though, I've got a new requirement: I need to be able to change the user > of a given Connection. > > I've found that > aConnection.addObjectToBothSidesOfRelationshipWithKey(newUser,'user') seems > to work sort of properly — looks like all the relationships are properly > updated and the key in the Connection table is changed in the database all > right. > > The catch is, sometimes (by far not always), a short time after the change, I > start getting > > No Connection found with globalID: <Connection: [department_id: X, user_id: > Y] > > > with the original pre-change values of X and Y. > > I can't be quite sure, but I think probably there's sometimes a :N > User.connections snapshot which contains the globalID of the original > object. Since the user relationship change of its target actually changes the > very PK of the object, the EOF synchronisation does not match the updated > object (with a different PK => different globalID) with the original one and > does not update the snapshot. Then, someone touches the relationship, gets > the snapshot, EOF creates a fault with the original values, and when the > fault fires, oops, there's nothing like that in the database. > > Does anybody see how to fix the problem? > > In principle I guess I could go programmatically through all the :N snapshots > and try to find the old globalIDs and replace them by the new ones; but it > would be sorta non-trivial and definitely dangerous... > > Thanks, > OC > > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/mailinglists%40kataputt.com > > This email sent to mailingli...@kataputt.com
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com