From c95b0e922fc14d6d9c331da7c712b823a01e2bdc Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 18 Nov 2025 16:58:36 -0500 Subject: [PATCH 1/3] fix #11990 --- src/main/java/edu/harvard/iq/dataverse/DatasetField.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java index a735ae7470c..0f47caf256b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java @@ -197,6 +197,7 @@ public void setDatasetFieldValues(List datasetFieldValues) { @ManyToMany(cascade = {CascadeType.MERGE}) @JoinTable(indexes = {@Index(columnList="datasetfield_id"),@Index(columnList="controlledvocabularyvalues_id")}) + @OrderBy("displayOrder ASC") private List controlledVocabularyValues = new ArrayList<>(); public List getControlledVocabularyValues() { @@ -604,14 +605,15 @@ private DatasetField copy(Object versionOrTemplate, DatasetFieldCompoundValue pa if (versionOrTemplate != null) { if (versionOrTemplate instanceof DatasetVersion) { - dsf.setDatasetVersion((DatasetVersion) versionOrTemplate); + dsf.setDatasetVersion((DatasetVersion) versionOrTemplate); } else { dsf.setTemplate((Template) versionOrTemplate); } } dsf.setParentDatasetFieldCompoundValue(parent); - dsf.setControlledVocabularyValues(controlledVocabularyValues); + + dsf.getControlledVocabularyValues().addAll(controlledVocabularyValues); for (DatasetFieldValue dsfv : datasetFieldValues) { dsf.getDatasetFieldValues().add(dsfv.copy(dsf)); From bf9cc0dd3eb15fdb5981ea6d410acabcc3f7cd8b Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 18 Nov 2025 17:16:41 -0500 Subject: [PATCH 2/3] release note --- doc/release-notes/11990-controlled-vocab-edit-error.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/release-notes/11990-controlled-vocab-edit-error.md diff --git a/doc/release-notes/11990-controlled-vocab-edit-error.md b/doc/release-notes/11990-controlled-vocab-edit-error.md new file mode 100644 index 00000000000..8e98d10b40a --- /dev/null +++ b/doc/release-notes/11990-controlled-vocab-edit-error.md @@ -0,0 +1,5 @@ +### Bug Fix + +Editing a controlled vocabulary field (i.e. one with values specified in the field's metadatablock) that only allows a single selection would also update the value in the prior published version if (and only if) the edit was made starting from the published version (versus an existing draft). This is now fixed. +The bug appears to be 11+ years old and previously unreported. As the value in the database was overwritten, there is no simple way to detect if/when this occurred without looking at backups or archival file copies. + From 722a0bf6a837dede03a1b8de95c5b79fbe28a2e3 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 18 Nov 2025 17:25:50 -0500 Subject: [PATCH 3/3] unrelated change --- src/main/java/edu/harvard/iq/dataverse/DatasetField.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java index 0f47caf256b..dc19f73cd81 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java @@ -172,7 +172,6 @@ public void setParentDatasetFieldCompoundValue(DatasetFieldCompoundValue parentD } @OneToMany(mappedBy = "parentDatasetField", orphanRemoval = true, cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}) - @OrderBy("displayOrder ASC") private List datasetFieldCompoundValues = new ArrayList<>(); public List getDatasetFieldCompoundValues() {