From addf4c781eff6b341695c87d58ea8a0d11f2cd67 Mon Sep 17 00:00:00 2001 From: Vera Clemens Date: Thu, 29 Jan 2026 18:20:44 +0100 Subject: [PATCH 1/3] fix: fix bug in generateNewIdentifierByStoredProcedure --- .../edu/harvard/iq/dataverse/Dataset.java | 22 ------------------- .../iq/dataverse/DvObjectServiceBean.java | 13 ++++++++--- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/Dataset.java b/src/main/java/edu/harvard/iq/dataverse/Dataset.java index e7e5903482c..42e5c1bbaab 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Dataset.java +++ b/src/main/java/edu/harvard/iq/dataverse/Dataset.java @@ -28,13 +28,10 @@ import jakarta.persistence.NamedNativeQuery; import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; -import jakarta.persistence.NamedStoredProcedureQuery; import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import jakarta.persistence.OrderBy; -import jakarta.persistence.ParameterMode; import jakarta.persistence.SqlResultSetMapping; -import jakarta.persistence.StoredProcedureParameter; import jakarta.persistence.Table; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; @@ -94,25 +91,6 @@ } ) -/* - Below is the database stored procedure for getting a string dataset id. - Used when the Dataverse is (optionally) configured to use - procedurally generated values for dataset ids, instead of the default - random strings. - - The use of a stored procedure to create an identifier is explained in the - installation documentation (where an example script is supplied). - The stored procedure can be implemented using other SQL flavors - - without having to modify the application code. - -- L.A. 4.6.2 (modified by C.S. for version 5.4.1+) -*/ -@NamedStoredProcedureQuery( - name = "Dataset.generateIdentifierFromStoredProcedure", - procedureName = "generateIdentifierFromStoredProcedure", - parameters = { - @StoredProcedureParameter(mode = ParameterMode.OUT, type = String.class) - } -) @Entity @Table(indexes = { @Index(columnList = "guestbook_id"), diff --git a/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java index 91c507774e9..d5ba8bf6538 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java @@ -27,6 +27,8 @@ import jakarta.persistence.StoredProcedureQuery; import org.apache.commons.lang3.StringUtils; +import org.eclipse.persistence.exceptions.DatabaseException; +import org.postgresql.util.PSQLException; /** * Your goto bean for everything {@link DvObject}, that's not tied to any @@ -402,9 +404,14 @@ public Map getObjectPathsByIds(Set objectIds){ } public String generateNewIdentifierByStoredProcedure() { - StoredProcedureQuery query = this.em.createNamedStoredProcedureQuery("Dataset.generateIdentifierFromStoredProcedure"); - query.execute(); - return (String) query.getOutputParameterValue(1); + try { + Query query = em.createNativeQuery("SELECT generateIdentifierFromStoredProcedure()"); + return (String) query.getSingleResult(); + } catch (DatabaseException e) { + // It's possible that the function "generateIdentifierFromStoredProcedure" is not defined in the database + logger.severe("Error generating identifier using stored procedure: " + e.getMessage()); + return null; + } } /** @deprecated Backward-compatibility method to get the effective pid generator for a DvObjectContainer. From 999fa3207077ae64d938db41437bf3dcae729c31 Mon Sep 17 00:00:00 2001 From: Vera Clemens Date: Thu, 29 Jan 2026 18:27:12 +0100 Subject: [PATCH 2/3] fix: fix bug in generateNewIdentifierByStoredProcedure --- src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java index d5ba8bf6538..0f39459f8cd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java @@ -24,11 +24,9 @@ import jakarta.persistence.NonUniqueResultException; import jakarta.persistence.PersistenceContext; import jakarta.persistence.Query; -import jakarta.persistence.StoredProcedureQuery; import org.apache.commons.lang3.StringUtils; import org.eclipse.persistence.exceptions.DatabaseException; -import org.postgresql.util.PSQLException; /** * Your goto bean for everything {@link DvObject}, that's not tied to any From ef21bd9036f8f59f8e7990355dd1f8ed49f20f10 Mon Sep 17 00:00:00 2001 From: Vera Clemens Date: Fri, 30 Jan 2026 10:21:14 +0100 Subject: [PATCH 3/3] docs: add release note for #12127 --- doc/release-notes/12127-fix-stored-proc-generated-pids.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/release-notes/12127-fix-stored-proc-generated-pids.md diff --git a/doc/release-notes/12127-fix-stored-proc-generated-pids.md b/doc/release-notes/12127-fix-stored-proc-generated-pids.md new file mode 100644 index 00000000000..968bd6007b9 --- /dev/null +++ b/doc/release-notes/12127-fix-stored-proc-generated-pids.md @@ -0,0 +1,3 @@ +This release fixes a bug which prevents PIDs from being generated when the `identifier-generation-style` is set to `storedProcGenerated`. + +Previously, this caused a database error ("ERROR: procedure generateidentifierfromstoredprocedure(unknown) does not exist"). \ No newline at end of file