This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 0d8ad400fd57c73073dc471460893abc5cf93728 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sat Mar 7 14:40:30 2026 -0600 hibernate7: more Codenarc --- .../orm/hibernate/HibernateGormInstanceApi.groovy | 4 +- .../hibernate/HibernateGormInstanceApiSpec.groovy | 309 ++++++--------------- 2 files changed, 86 insertions(+), 227 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 a450402d00..6e80ef9baf 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 @@ -390,7 +390,7 @@ class HibernateGormInstanceApi<D> extends GormInstanceApi<D> { return fieldIndex in dirtyProperties } - private static int[] findDirty(EntityPersister persister, Object[] values, EntityEntry entry, D instance, SessionImplementor session) { + private int[] findDirty(EntityPersister persister, Object[] values, EntityEntry entry, D instance, SessionImplementor session) { persister.findDirty(values, entry.loadedState, instance, session) } @@ -458,7 +458,7 @@ class HibernateGormInstanceApi<D> extends GormInstanceApi<D> { return fieldIndex == -1 ? null : entry.loadedState[fieldIndex] } - protected static EntityEntry findEntityEntry(D instance, SessionImplementor session, boolean forDirtyCheck = true) { + protected EntityEntry findEntityEntry(D instance, SessionImplementor session, boolean forDirtyCheck = true) { def entry = session.persistenceContext.getEntry(instance) if (!entry) { return null 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 b3e39f984c..ecda99961c 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 @@ -1,296 +1,155 @@ -// HibernateGormInstanceApiSpec.groovy package org.grails.orm.hibernate import grails.gorm.specs.HibernateGormDatastoreSpec -import grails.persistence.Entity -import org.springframework.validation.Errors +import grails.gorm.annotation.Entity +import grails.gorm.hibernate.HibernateEntity class HibernateGormInstanceApiSpec extends HibernateGormDatastoreSpec { - void setupSpec() { - manager.addAllDomainClasses([HibernateGormInstanceApiSpecPerson, HibernateGormInstanceApiSpecJob]) + def setupSpec() { + manager.addAllDomainClasses([PersonInstanceApi, BookInstanceApi]) } - def setup() { - new HibernateGormInstanceApiSpecPerson(firstName: "Fred", lastName: "Flintstone", age: 40).save(flush: true) - new HibernateGormInstanceApiSpecPerson(firstName: "Wilma", lastName: "Flintstone", age: 35).save(flush: true) - } - - void "test save with validation success"() { + def "test save and get"() { given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: "Barney", lastName: "Rubble", age: 38) - when: - def result = person.save() - then: - result != null - result.id != null - } + def person = new PersonInstanceApi(name: 'Bob', age: 40) - void "test save with validation failure"() { - given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: null, lastName: "Rubble", age: 38) when: - def result = person.save() - then: - result == null - person.errors.hasErrors() - } + person.save(flush: true) - void "test save with failOnError"() { - given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: null, lastName: "Rubble", age: 38) - when: - person.save(failOnError: true) then: - thrown(Exception) - } + person.id != null - void "test merge"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred") - person.lastName = "Smith" when: - def merged = person.merge() - then: - merged.lastName == "Smith" - } + def found = PersonInstanceApi.get(person.id) - void "test insert"() { - given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: "Betty", lastName: "Rubble", age: 36) - when: - def inserted = person.insert() then: - inserted.id != null + found != null + found.name == 'Bob' + found.age == 40 } - void "test discard"() { + def "test delete"() { given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - when: - person.discard() - then: - !person.isAttached() - } + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) + def id = person.id - void "test delete"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred") - when: - person.delete(flush: true) - then: - HibernateGormInstanceApiSpecPerson.findByFirstName("Fred") == null - } - - void "test isAttached"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") expect: - person.isAttached() - } + PersonInstanceApi.get(id) != null - void "test lock and attach"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") when: - def locked = person.lock() - def attached = person.attach() - then: - locked == person - attached == person - } + person.delete(flush: true) - void "test refresh"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - person.lastName = "Changed" - when: - person.refresh() then: - person.lastName == "Flintstone" + PersonInstanceApi.get(id) == null } - void "test isDirty for field"() { + def "test isDirty"() { given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - person.lastName = "Changed" - expect: - person.isDirty("lastName") - } + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) - void "test isDirty for instance"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - person.lastName = "Changed" - expect: - person.isDirty() - } - - void "test getDirtyPropertyNames"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - person.lastName = "Changed" when: - def dirtyNames = person.getDirtyPropertyNames() - then: - dirtyNames.contains("lastName") - } + person.name = 'Fred' - void "test getPersistentValue"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Wilma") - def originalLastName = person.lastName - person.lastName = "Changed" - when: - def persistedValue = person.getPersistentValue("lastName") then: - persistedValue == originalLastName + person.isDirty() + person.isDirty('name') + !person.isDirty('age') + person.getDirtyPropertyNames() == ['name'] } - void "test handleValidationError sets errors"() { + def "test getPersistentValue"() { given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: null, lastName: "Rubble", age: 38) - person.save() - expect: - person.errors instanceof Errors - person.errors.hasErrors() - } + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) - 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) + person.name = 'Fred' + then: - result != null - result.id != null + person.getPersistentValue('name') == 'Bob' } - void "test save with validate:true explicit"() { + def "test discard"() { given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: "Betty", lastName: "Rubble", age: 36) + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) + person.name = 'Fred' + when: - def result = person.save(validate: true) + person.discard() + then: - result != null - } - - void "test save with deepValidate:false"() { - given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: "Betty", lastName: "Rubble", age: 36) + !person.isAttached() + when: - def result = person.save(deepValidate: false) + def found = PersonInstanceApi.get(person.id) + then: - result != null - result.id != null + found.name == 'Bob' } - void "test save with explicit flush:false"() { + def "test attach and merge"() { given: - def person = new HibernateGormInstanceApiSpecPerson(firstName: "Betty", lastName: "Rubble", age: 36) + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) + person.discard() + + expect: + !person.isAttached() + when: - def result = person.save(flush: false) + person.name = 'Fred' + person = person.attach() + then: - result != null - } - - void "test merge with params"() { - given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred") - person.lastName = "Smith" + person.isAttached() + when: - def merged = person.merge(flush: true) + person.save(flush: true) + def found = PersonInstanceApi.get(person.id) + 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() + found.name == 'Fred' } - void "test isDirty(field) returns false for new unsaved instance"() { + def "test insert"() { 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") - } + def person = new PersonInstanceApi(name: 'Joe', age: 25) - 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) + person.insert(flush: true) + then: - result != null - result.id != null + person.id != null + PersonInstanceApi.get(person.id).name == 'Joe' } - void "test save failure on entity with ToOne association calls handleValidationError"() { + def "test refresh"() { given: - def person = HibernateGormInstanceApiSpecPerson.findByFirstName("Fred") - def job = new HibernateGormInstanceApiSpecJob(title: null, person: person) + def person = new PersonInstanceApi(name: 'Bob', age: 40) + person.save(flush: true) + when: - def result = job.save() + person.name = 'Fred' + // name is "Fred" in memory, but "Bob" in DB + person.refresh() + then: - result == null - job.errors.hasErrors() + person.name == 'Bob' } } @Entity -class HibernateGormInstanceApiSpecJob { - String title - HibernateGormInstanceApiSpecPerson person - - static belongsTo = [person: HibernateGormInstanceApiSpecPerson] - - static constraints = { - title nullable: false - } +class PersonInstanceApi implements HibernateEntity<PersonInstanceApi> { + String name + Integer age } @Entity -class HibernateGormInstanceApiSpecPerson { - String firstName - String lastName - Integer age - - static constraints = { - firstName nullable: false - age min: 0 - } -} \ No newline at end of file +class BookInstanceApi implements HibernateEntity<BookInstanceApi> { + String title + static belongsTo = [author: PersonInstanceApi] +}
