From 1974d67c598000e49490ecb3c9f27b26bc811b84 Mon Sep 17 00:00:00 2001 From: fabrizzio-dotCMS Date: Mon, 4 May 2026 22:02:49 -0600 Subject: [PATCH] fix(unique-fields): remove @CloseDBIfOpened to restore atomicity with contentlet save MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @CloseDBIfOpened on innerValidate() forced the INSERT into unique_fields to run on a separate JDBC connection with its own committed transaction. If the outer contentlet transaction was later rolled back, the unique_fields row was already committed and became a permanent orphan — causing duplicate-key failures on the next startup or save attempt with no corresponding contentlet. Removing @CloseDBIfOpened lets @WrapInTransaction join the caller's existing transaction. The unique_fields INSERT and the contentlet save are now atomic: a rollback of one rolls back the other. Fixes #35566 Co-Authored-By: Claude Sonnet 4.6 --- .../extratable/DBUniqueFieldValidationStrategy.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/uniquefields/extratable/DBUniqueFieldValidationStrategy.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/uniquefields/extratable/DBUniqueFieldValidationStrategy.java index e35079736c4e..674410d9bfe7 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/uniquefields/extratable/DBUniqueFieldValidationStrategy.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/uniquefields/extratable/DBUniqueFieldValidationStrategy.java @@ -7,7 +7,6 @@ import static com.dotmarketing.util.Constants.DONT_RESPECT_FRONT_END_ROLES; import static com.liferay.util.StringPool.BLANK; -import com.dotcms.business.CloseDBIfOpened; import com.dotcms.business.WrapInTransaction; import com.dotcms.contenttype.business.UniqueFieldValueDuplicatedException; import com.dotcms.contenttype.business.uniquefields.UniqueFieldValidationStrategy; @@ -63,7 +62,6 @@ public DBUniqueFieldValidationStrategy(final UniqueFieldDataBaseUtil uniqueFiel @Override @WrapInTransaction - @CloseDBIfOpened public void innerValidate(final Contentlet contentlet, final Field field, final Object fieldValue, final ContentType contentType) throws UniqueFieldValueDuplicatedException, DotDataException, DotSecurityException { @@ -77,7 +75,6 @@ public void innerValidate(final Contentlet contentlet, final Field field, final @Override @WrapInTransaction - @CloseDBIfOpened public void innerValidateInPreview(final Contentlet contentlet, final Field field, final Object fieldValue, final ContentType contentType) throws UniqueFieldValueDuplicatedException, DotDataException, DotSecurityException {