This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch past-M2 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 249b4a08e9ecdbe8cc23e2a17d57e97bf157531c Author: Andrus Adamchik <[email protected]> AuthorDate: Thu Jun 11 19:02:57 2026 -0400 CAY-2960 Undoing renamed relationship change throws --- RELEASE-NOTES.txt | 1 + .../modeler/ui/dbrelationship/DbRelationshipDialog.java | 15 ++++++++++++--- .../cayenne/modeler/undo/RelationshipUndoableEdit.java | 5 ++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index a002a2091..c08229e56 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -20,6 +20,7 @@ Bug Fixes: CAY-2958 Empty join is saved CAY-2959 Modeler: DbRelationship dialog "Cancel" doesn't cancel +CAY-2960 Undoing renamed relationship change throws ---------------------------------- Release: 5.0-M2 diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java index 377342a53..8a1d5184c 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java @@ -399,16 +399,25 @@ public class DbRelationshipDialog extends ProjectDialog { return; } - String sourceEntityName = NameBuilder + String newName = NameBuilder .builder(rel, rel.getSourceEntity()) .baseName(userInputName) .name(); - if (Objects.equals(sourceEntityName, rel.getName())) { + if (Objects.equals(newName, rel.getName())) { return; } String oldName = rel.getName(); - rel.setName(sourceEntityName); + + // the entity maps relationships by name, so an attached relationship must be re-keyed, not just renamed + DbEntity sourceEntity = rel.getSourceEntity(); + if (sourceEntity.getRelationship(oldName) == rel) { + sourceEntity.removeRelationship(oldName); + rel.setName(newName); + sourceEntity.addRelationship(rel); + } else { + rel.setName(newName); + } session.fireDbRelationshipEvent(DbRelationshipEvent.ofChange(this, rel, rel.getSourceEntity(), oldName)); } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/RelationshipUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/RelationshipUndoableEdit.java index 0b2a7aac9..b7c41913b 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/RelationshipUndoableEdit.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/RelationshipUndoableEdit.java @@ -19,6 +19,7 @@ package org.apache.cayenne.modeler.undo; import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.DbJoin; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.map.ObjRelationship; @@ -102,7 +103,9 @@ public class RelationshipUndoableEdit extends CayenneUndoableEdit { rel.setToMany(dbRelationship.isToMany()); rel.setTargetEntityName(dbRelationship.getTargetEntityName()); rel.setSourceEntity(dbRelationship.getSourceEntity()); - rel.setJoins(rel.getJoins()); + rel.setJoins(dbRelationship.getJoins().stream() + .map(j -> new DbJoin(rel, j.getSourceName(), j.getTargetName())) + .toList()); return rel; }
