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 a05a82cce7bcffbc1bfbd631774cb9de5ef10593
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Tue Feb 24 06:38:31 2026 -0600

    HibernateGormInstanceApi tested
---
 .../orm/hibernate/HibernateGormInstanceApi.groovy  |  49 +-------
 .../hibernate/HibernateGormInstanceApiSpec.groovy  | 130 ++++++++++++++++++++-
 2 files changed, 132 insertions(+), 47 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormInstanceApi.groovy
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormInstanceApi.groovy
index 5bbc0cdeb5..0bd4b3e2df 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormInstanceApi.groovy
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormInstanceApi.groovy
@@ -15,32 +15,23 @@
  */
 package org.grails.orm.hibernate
 
-import org.codehaus.groovy.runtime.InvokerHelper
-
-import jakarta.persistence.GenerationType
-
-import org.hibernate.engine.spi.SessionFactoryImplementor
-import org.hibernate.generator.Assigned
-import org.hibernate.generator.Generator
-
 import grails.gorm.validation.CascadingValidator
 import groovy.transform.CompileStatic
 import jakarta.persistence.FlushModeType
+import org.codehaus.groovy.runtime.InvokerHelper
 import org.grails.datastore.gorm.GormInstanceApi
 import org.grails.datastore.gorm.GormValidateable
 import org.grails.datastore.mapping.core.Datastore
-import org.grails.datastore.mapping.engine.event.PersistEvent
+import org.grails.datastore.mapping.engine.event.ValidationEvent
 import org.grails.datastore.mapping.model.config.GormProperties
 import org.grails.datastore.mapping.model.types.Embedded
-import org.grails.datastore.mapping.reflect.ClassUtils
-import org.grails.datastore.mapping.reflect.EntityReflector
-import org.grails.datastore.mapping.engine.event.ValidationEvent
 import org.grails.datastore.mapping.model.PersistentEntity
 import org.grails.datastore.mapping.model.PersistentProperty
 import org.grails.datastore.mapping.model.types.Association
 import org.grails.datastore.mapping.model.types.ToOne
+import org.grails.datastore.mapping.reflect.ClassUtils
+import org.grails.datastore.mapping.reflect.EntityReflector
 import org.grails.orm.hibernate.cfg.GrailsHibernateUtil
-import org.grails.orm.hibernate.query.HibernateHqlQuery
 import org.grails.orm.hibernate.support.HibernateRuntimeUtils
 
 import org.hibernate.HibernateException
@@ -165,12 +156,7 @@ class HibernateGormInstanceApi<D> extends 
GormInstanceApi<D> {
     }
 
 
-    private boolean isAssignedId(PersistentEntity entity) {
-        return ((SessionFactoryImplementor) sessionFactory)
-                .getMappingMetamodel()
-                .getEntityDescriptor(entity.getName())
-                .getGenerator() instanceof Assigned
-    }
+
 
 
     private void runDeferredBinding() {
@@ -336,14 +322,6 @@ class HibernateGormInstanceApi<D> extends 
GormInstanceApi<D> {
         return true
     }
 
-    private boolean shouldInsert(Map arguments) {
-        ClassUtils.getBooleanFromMap(ARGUMENT_INSERT, arguments)
-    }
-
-    private boolean shouldMerge(Map arguments) {
-        ClassUtils.getBooleanFromMap(ARGUMENT_MERGE, arguments)
-    }
-
     protected boolean shouldFlush(Map map) {
         if (map?.containsKey(ARGUMENT_FLUSH)) {
             return ClassUtils.getBooleanFromMap(ARGUMENT_FLUSH, map)
@@ -391,23 +369,6 @@ class HibernateGormInstanceApi<D> extends 
GormInstanceApi<D> {
         insertActiveThreadLocal.remove();
     }
 
-    protected void incrementVersion(Object target) {
-        if (target instanceof GroovyObject) {
-            GroovyObject groovyTarget = (GroovyObject) target
-            MetaProperty versionProp = 
groovyTarget.metaClass.hasProperty(groovyTarget, GormProperties.VERSION)
-            if (versionProp != null) {
-                Object version = 
groovyTarget.getProperty(GormProperties.VERSION)
-                if (version instanceof Long) {
-                    groovyTarget.setProperty(GormProperties.VERSION, ++((Long) 
version))
-                }
-            }
-        }
-    }
-
-    SessionFactory getSessionFactory() {
-        return this.sessionFactory
-    }
-
     /**
      * Checks whether a field is dirty
      *
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormInstanceApiSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormInstanceApiSpec.groovy
index 48b4a5e897..b3e39f984c 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormInstanceApiSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormInstanceApiSpec.groovy
@@ -2,17 +2,15 @@
 package org.grails.orm.hibernate
 
 import grails.gorm.specs.HibernateGormDatastoreSpec
-import grails.gorm.specs.entities.Club
 import grails.persistence.Entity
 import org.springframework.validation.Errors
 
 class HibernateGormInstanceApiSpec extends HibernateGormDatastoreSpec {
 
     void setupSpec() {
-        manager.addAllDomainClasses([HibernateGormInstanceApiSpecPerson])
+        manager.addAllDomainClasses([HibernateGormInstanceApiSpecPerson, 
HibernateGormInstanceApiSpecJob])
     }
 
-
     def setup() {
         new HibernateGormInstanceApiSpecPerson(firstName: "Fred", lastName: 
"Flintstone", age: 40).save(flush: true)
         new HibernateGormInstanceApiSpecPerson(firstName: "Wilma", lastName: 
"Flintstone", age: 35).save(flush: true)
@@ -157,6 +155,132 @@ class HibernateGormInstanceApiSpec extends 
HibernateGormDatastoreSpec {
         person.errors instanceof Errors
         person.errors.hasErrors()
     }
+
+    void "test save with validate:false skips validation"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: 
"Betty", lastName: "Rubble", age: 36)
+        when:
+        def result = person.save(validate: false)
+        then:
+        result != null
+        result.id != null
+    }
+
+    void "test save with validate:true explicit"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: 
"Betty", lastName: "Rubble", age: 36)
+        when:
+        def result = person.save(validate: true)
+        then:
+        result != null
+    }
+
+    void "test save with deepValidate:false"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: 
"Betty", lastName: "Rubble", age: 36)
+        when:
+        def result = person.save(deepValidate: false)
+        then:
+        result != null
+        result.id != null
+    }
+
+    void "test save with explicit flush:false"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: 
"Betty", lastName: "Rubble", age: 36)
+        when:
+        def result = person.save(flush: false)
+        then:
+        result != null
+    }
+
+    void "test merge with params"() {
+        given:
+        def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred")
+        person.lastName = "Smith"
+        when:
+        def merged = person.merge(flush: true)
+        then:
+        merged.lastName == "Smith"
+    }
+
+    void "test isDirty returns false for new unsaved instance"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: "New", 
lastName: "Person", age: 25)
+        expect:
+        !person.isDirty()
+    }
+
+    void "test isDirty(field) returns false for new unsaved instance"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: "New", 
lastName: "Person", age: 25)
+        expect:
+        !person.isDirty("firstName")
+    }
+
+    void "test isDirty(field) returns false for field that has not changed"() {
+        given:
+        def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred")
+        person.lastName = "Changed"
+        expect:
+        !person.isDirty("firstName")
+        person.isDirty("lastName")
+    }
+
+    void "test getDirtyPropertyNames returns empty list for new unsaved 
instance"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: "New", 
lastName: "Person", age: 25)
+        expect:
+        person.getDirtyPropertyNames() == []
+    }
+
+    void "test getPersistentValue returns null for new unsaved instance"() {
+        given:
+        def person = new HibernateGormInstanceApiSpecPerson(firstName: "New", 
lastName: "Person", age: 25)
+        expect:
+        person.getPersistentValue("firstName") == null
+    }
+
+    void "test getPersistentValue returns null for unknown field name"() {
+        given:
+        def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred")
+        expect:
+        person.getPersistentValue("nonExistentField") == null
+    }
+
+    void "test save succeeds on entity with ToOne association already in 
session"() {
+        given:
+        def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred")
+        def job = new HibernateGormInstanceApiSpecJob(title: "Programmer", 
person: person)
+        when:
+        def result = job.save(flush: true)
+        then:
+        result != null
+        result.id != null
+    }
+
+    void "test save failure on entity with ToOne association calls 
handleValidationError"() {
+        given:
+        def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred")
+        def job = new HibernateGormInstanceApiSpecJob(title: null, person: 
person)
+        when:
+        def result = job.save()
+        then:
+        result == null
+        job.errors.hasErrors()
+    }
+}
+
+@Entity
+class HibernateGormInstanceApiSpecJob {
+    String title
+    HibernateGormInstanceApiSpecPerson person
+
+    static belongsTo = [person: HibernateGormInstanceApiSpecPerson]
+
+    static constraints = {
+        title nullable: false
+    }
 }
 
 @Entity

Reply via email to