This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit ec859875d3ae5a8ed00e466cb5a68ebed343e65d
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Tue Jan 13 12:30:32 2026 -0600

    CascadeBehavior refactor
---
 .../orm/hibernate/cfg/GrailsDomainBinder.java      | 15 +----
 .../cfg/domainbinding/CascadeBehavior.java         | 26 ++++++++
 .../hibernate/cfg/GrailsDomainBinderSpec.groovy    | 77 ----------------------
 .../domainbinding/CascadeBehaviorEnumSpec.groovy   | 25 +++++++
 4 files changed, 52 insertions(+), 91 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index fdc4dab58f..8d03295a55 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -1158,20 +1158,7 @@ public class GrailsDomainBinder
      * @return True if save-update or any other cascade property that 
encompasses those is present.
      */
     protected boolean isSaveUpdateCascade(String cascade) {
-        String[] cascades = cascade.split(",");
-
-        for (String cascadeProp : cascades) {
-            String trimmedProp = cascadeProp.trim();
-            try {
-                if (CascadeBehavior.fromString(trimmedProp).isSaveUpdate()) {
-                    return true;
-                }
-            } catch (MappingException e) {
-                // ignore
-            }
-        }
-
-        return cascade.contains(CascadeBehavior.PERSIST.getValue()) && 
cascade.contains(CascadeBehavior.MERGE.getValue());
+        return CascadeBehavior.isSaveUpdate(cascade);
     }
 
     /**
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehavior.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehavior.java
index f4a0cf70d3..b20ca69519 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehavior.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehavior.java
@@ -75,6 +75,32 @@ public enum CascadeBehavior {
         return this == ALL || this == ALL_DELETE_ORPHAN || this == SAVE_UPDATE;
     }
 
+    /**
+     * Check if a save-update cascade is defined within the Hibernate cascade 
properties string.
+     * @param cascade The string containing the cascade properties.
+     * @return True if save-update or any other cascade property that 
encompasses those is present.
+     */
+    public static boolean isSaveUpdate(String cascade) {
+        if (cascade == null || cascade.isEmpty()) {
+            return false;
+        }
+
+        String[] cascades = cascade.split(",");
+
+        for (String cascadeProp : cascades) {
+            String trimmedProp = cascadeProp.trim();
+            try {
+                if (CascadeBehavior.fromString(trimmedProp).isSaveUpdate()) {
+                    return true;
+                }
+            } catch (MappingException e) {
+                // ignore
+            }
+        }
+
+        return cascade.contains(PERSIST.getValue()) && 
cascade.contains(MERGE.getValue());
+    }
+
 
     public static CascadeBehavior fromString(String value) {
         return Arrays.stream(CascadeBehavior.values())
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
deleted file mode 100644
index 048eb86ae2..0000000000
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.grails.orm.hibernate.cfg
-
-import grails.gorm.specs.HibernateGormDatastoreSpec
-
-class GrailsDomainBinderSpec extends HibernateGormDatastoreSpec {
-
-
-    void "Test single class"() {
-        when:
-
-        def collector = getCollector()
-        def grailsDomainBinder = getGrailsDomainBinder()
-        def simpleName = "Book"
-        def fieldProperties = [title: String]
-        def persistentEntity = 
createPersistentEntity(grailsDomainBinder,simpleName, fieldProperties, [:])
-
-                grailsDomainBinder.bindRoot(persistentEntity, 
collector,"sessionFactoryName")
-
-                println("when")
-
-                then:
-
-                1 == 1
-
-            }
-
-        
-
-            void "Test isSaveUpdateCascade"() {
-
-                given:
-
-                def binder = getGrailsDomainBinder()
-
-        
-
-                expect:
-
-                binder.isSaveUpdateCascade(cascade) == expected
-
-        
-
-                where:
-
-                cascade              | expected
-
-                "all"                | true
-
-                "all-delete-orphan"  | true
-
-                "persist,merge"      | true
-
-                "save-update"        | true
-
-                "merge,persist"      | true
-
-                "merge"              | false
-
-                "persist"            | false
-
-                "none"               | false
-
-                "delete"             | false
-
-                "lock"               | false
-
-                "evict"              | false
-
-                "replicate"          | false
-
-                "all,delete"         | true
-
-                "persist,merge,lock" | true
-
-            }
-
-        }
\ No newline at end of file
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorEnumSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorEnumSpec.groovy
index 4c95090b89..4bff4889af 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorEnumSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorEnumSpec.groovy
@@ -48,4 +48,29 @@ class CascadeBehaviorEnumSpec extends Specification {
         then:
         thrown(MappingException)
     }
+
+    @Unroll
+    void "test static isSaveUpdate for cascade string: #cascade"() {
+        expect:
+        CascadeBehavior.isSaveUpdate(cascade) == expected
+
+        where:
+        cascade              | expected
+        "all"                | true
+        "all-delete-orphan"  | true
+        "persist,merge"      | true
+        "save-update"        | true
+        "merge,persist"      | true
+        "merge"              | false
+        "persist"            | false
+        "none"               | false
+        "delete"             | false
+        "lock"               | false
+        "evict"              | false
+        "replicate"          | false
+        "all,delete"         | true
+        "persist,merge,lock" | true
+        ""                   | false
+        null                 | false
+    }
 }

Reply via email to