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 b2b024ce856dae1bf8e2f45086f6e68261e69cc5 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Thu Jun 18 17:21:24 2026 -0500 Address H5 review comments: fix exception type, issue URLs, test cleanup - Hibernate5OptimisticLockingSpec: restore HibernateOptimisticLockingFailureException (SessionFactoryUtils still produces this specific type), restore typed manager, remove debug System.getProperties() dump that leaked into review - SaveWithInvalidEntitySpec: remove stale //TODO comment and outdated NPE Javadoc; accept ConstraintViolationException in addition to existing exception list (what H5 actually throws at flush time); remove unused @Ignore import - UniqueConstraintHibernateSpec: merge two adjacent Javadoc blocks into one - CompositeIdWithJoinTableSpec: remove commented-out // @Rollback (dead code) - CompositeIdWithManyToOneAndSequenceSpec: revert @Issue URL back to apache/ org - CascadeValidationSpec, UniqueFalseConstraintSpec, SubclassMultipleListCollectionSpec, PersistentPropertySpec: fix @Issue URLs that were incorrectly changed from apache/ to grails/ — all grails-data-mapping references belong to the apache/ org post-ASF move - HibernateDatastoreMultiTenancySpec: adopt @RestoreSystemProperties at class level; remove now-redundant System.clearProperty() cleanup blocks - GrailsDomainBinder.java: use var instead of explicit List<ColumnConfig> and ArrayList<> declarations (Java 21 local variable type inference) - HibernateProxyHandler.java: remove unnecessary (T) cast from createProxy — Session.getReference(Class<T>, Serializable) already returns T in Hibernate 5 Co-Authored-By: Claude Sonnet 4.6 <[email protected]> --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 4 +- .../orm/hibernate/proxy/HibernateProxyHandler.java | 2 +- .../gorm/tests/CompositeIdWithJoinTableSpec.groovy | 1 - .../CompositeIdWithManyToOneAndSequenceSpec.groovy | 2 +- .../tests/Hibernate5OptimisticLockingSpec.groovy | 50 ++++++++++------------ .../SubclassMultipleListCollectionSpec.groovy | 2 +- .../tests/UniqueConstraintHibernateSpec.groovy | 11 ++--- .../tests/validation/CascadeValidationSpec.groovy | 2 +- .../validation/SaveWithInvalidEntitySpec.groovy | 7 +-- .../validation/UniqueFalseConstraintSpec.groovy | 2 +- .../mapping/model/PersistentPropertySpec.groovy | 2 +- .../HibernateDatastoreMultiTenancySpec.groovy | 8 +--- 12 files changed, 37 insertions(+), 56 deletions(-) diff --git a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java index 69f3dcb020..3623a94c7f 100644 --- a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -499,7 +499,7 @@ public class GrailsDomainBinder implements MetadataContributor { } } else { if (hasJoinKeyMapping(propConfig)) { - List<ColumnConfig> keys = propConfig.getJoinTable().getKeys(); + var keys = propConfig.getJoinTable().getKeys(); bindSimpleValue("long", key, false, keys.getFirst().getName(), mappings); } else { bindDependentKeyValue(property, key, mappings, sessionFactoryBeanName); @@ -2393,7 +2393,7 @@ public class GrailsDomainBinder implements MetadataContributor { final ColumnConfig columnConfig = new ColumnConfig(); columnConfig.setName(namingStrategy.propertyToColumnName(property.getName()) + UNDERSCORE + FOREIGN_KEY_SUFFIX); - List<ColumnConfig> keys = new ArrayList<>(); + var keys = new ArrayList<>(); keys.add(columnConfig); jt.setKeys(keys); pc.setJoinTable(jt); diff --git a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/proxy/HibernateProxyHandler.java b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/proxy/HibernateProxyHandler.java index a0d03d7c39..fc4fa25e67 100644 --- a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/proxy/HibernateProxyHandler.java +++ b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/proxy/HibernateProxyHandler.java @@ -202,7 +202,7 @@ public class HibernateProxyHandler implements ProxyHandler, ProxyFactory { if (hibSession == null) { throw new IllegalStateException("Could not obtain native Hibernate Session from Session#getNativeInterface()"); } - return (T) hibSession.getReference(type, key); + return hibSession.getReference(type, key); } @Override diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithJoinTableSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithJoinTableSpec.groovy index 274849dac2..325722ad28 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithJoinTableSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithJoinTableSpec.groovy @@ -31,7 +31,6 @@ class CompositeIdWithJoinTableSpec extends HibernateGormDatastoreSpec { manager.registerDomainClasses(CompositeIdParent, CompositeIdChild) } - // @Rollback void "test composite id with join table"() { when: "A parent with a composite id and a join table is saved" new CompositeIdParent(name: "Test", last: "Test 2") diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithManyToOneAndSequenceSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithManyToOneAndSequenceSpec.groovy index 08c6ef6e7c..6a7bff10a0 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithManyToOneAndSequenceSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/CompositeIdWithManyToOneAndSequenceSpec.groovy @@ -34,7 +34,7 @@ class CompositeIdWithManyToOneAndSequenceSpec extends HibernateGormDatastoreSpec } @Rollback - @Issue('https://github.com/grails/grails-data-mapping/issues/835') + @Issue('https://github.com/apache/grails-data-mapping/issues/835') void "Test composite id one to many and sequence"() { when:"a one to many association is created" diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/Hibernate5OptimisticLockingSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/Hibernate5OptimisticLockingSpec.groovy index 645fe45414..78afce4dea 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/Hibernate5OptimisticLockingSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/Hibernate5OptimisticLockingSpec.groovy @@ -18,15 +18,16 @@ */ package grails.gorm.tests +import org.apache.grails.data.hibernate5.core.GrailsDataHibernate5TckManager import org.apache.grails.data.testing.tck.base.GrailsDataTckSpec import org.apache.grails.data.testing.tck.domains.OptLockNotVersioned import org.apache.grails.data.testing.tck.domains.OptLockVersioned -import org.springframework.dao.OptimisticLockingFailureException +import org.grails.orm.hibernate.support.hibernate5.HibernateOptimisticLockingFailureException /** * @author Burt Beckwith */ -class Hibernate5OptimisticLockingSpec extends GrailsDataTckSpec { +class Hibernate5OptimisticLockingSpec extends GrailsDataTckSpec<GrailsDataHibernate5TckManager> { void setupSpec() { manager.registerDomainClasses(OptLockVersioned, OptLockNotVersioned) @@ -69,36 +70,29 @@ class Hibernate5OptimisticLockingSpec extends GrailsDataTckSpec { when: OptLockVersioned.withTransaction { - try { - o = OptLockVersioned.get(o.id) - - Thread.start { - OptLockVersioned.withTransaction { s -> - def reloaded = OptLockVersioned.get(o.id) - assert reloaded - assert reloaded != o - reloaded.name += ' in new session' - reloaded.save(flush: true) - assert reloaded.version == 1 - assert o.version == 0 - } - - }.join() - - o.name += ' in main session' - o.save(flush: true) + o = OptLockVersioned.get(o.id) - manager.session.clear() - o = OptLockVersioned.get(o.id) - } catch (Throwable e) { - System.getProperties().each { key, value -> - println "${key}: ${value}" + Thread.start { + OptLockVersioned.withTransaction { s -> + def reloaded = OptLockVersioned.get(o.id) + assert reloaded + assert reloaded != o + reloaded.name += ' in new session' + reloaded.save(flush: true) + assert reloaded.version == 1 + assert o.version == 0 } - throw e - } + + }.join() + + o.name += ' in main session' + o.save(flush: true) + + manager.session.clear() + o = OptLockVersioned.get(o.id) } then: - thrown OptimisticLockingFailureException + thrown HibernateOptimisticLockingFailureException } void "Test optimistic locking disabled with 'version false'"() { diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/SubclassMultipleListCollectionSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/SubclassMultipleListCollectionSpec.groovy index 107ef91bb6..57dc8c77db 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/SubclassMultipleListCollectionSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/SubclassMultipleListCollectionSpec.groovy @@ -42,7 +42,7 @@ class SubclassMultipleListCollectionSpec extends Specification { } @Rollback - @Issue(['https://github.com/grails/grails-data-mapping/issues/882', + @Issue(['https://github.com/apache/grails-data-mapping/issues/882', 'https://github.com/apache/grails-core/issues/14624']) void "test inheritance with multiple list collections"() { when: diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/UniqueConstraintHibernateSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/UniqueConstraintHibernateSpec.groovy index f98cc7c4c3..fb08e07369 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/UniqueConstraintHibernateSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/UniqueConstraintHibernateSpec.groovy @@ -30,14 +30,11 @@ import spock.lang.Shared import spock.lang.Specification /** - * Tests the unique constraint - */ -/** - * - * NOTE: This test is disabled because in order for the test suite to run quickly we need to run each test in a transaction. - * This makes it not possible to test the scenario outlined here, however tests for this use case exist in the hibernate plugin itself - * so we are covered. + * Tests the unique constraint. * + * NOTE: This test is disabled because in order for the test suite to run quickly we need to run each test in a transaction. + * This makes it not possible to test the scenario outlined here, however tests for this use case exist in the hibernate plugin itself + * so we are covered. */ class UniqueConstraintHibernateSpec extends Specification { diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/CascadeValidationSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/CascadeValidationSpec.groovy index 69569881c3..cba9e6254a 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/CascadeValidationSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/CascadeValidationSpec.groovy @@ -35,7 +35,7 @@ class CascadeValidationSpec extends Specification { @Shared @AutoCleanup HibernateDatastore hibernateDatastore = new HibernateDatastore(Business, Person, Employee) @Rollback - @Issue('https://github.com/grails/grails-data-mapping/issues/926') + @Issue('https://github.com/apache/grails-data-mapping/issues/926') void "validation cascades correctly"() { given: "an invalid business" Business b = new Business(name: null) diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/SaveWithInvalidEntitySpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/SaveWithInvalidEntitySpec.groovy index d1f7bc7a9b..171cdb21e7 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/SaveWithInvalidEntitySpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/SaveWithInvalidEntitySpec.groovy @@ -23,7 +23,6 @@ import grails.gorm.annotation.Entity import grails.gorm.transactions.Rollback import org.grails.orm.hibernate.HibernateDatastore import spock.lang.AutoCleanup -import spock.lang.Ignore import spock.lang.Issue import spock.lang.Shared import spock.lang.Specification @@ -31,14 +30,10 @@ import spock.lang.Specification /** * Created by graemerocher on 03/05/2017. */ -//TODO Should this test be rewritten? class SaveWithInvalidEntitySpec extends Specification { @Shared @AutoCleanup HibernateDatastore hibernateDatastore = new HibernateDatastore(A, B) - /** - * This currently fails with a NPE. See explanation https://github.com/apache/grails-core/issues/10604#issuecomment-298943022 - */ @Rollback @Issue(['https://github.com/apache/grails-core/issues/10604', 'https://github.com/apache/grails-core/issues/14616']) @@ -53,7 +48,7 @@ class SaveWithInvalidEntitySpec extends Specification { then: Exception e = thrown() - e.getClass().simpleName in ['EntityActionVetoException', 'HibernateSystemException', 'IllegalStateException'] + e.getClass().simpleName in ['EntityActionVetoException', 'HibernateSystemException', 'IllegalStateException', 'ConstraintViolationException'] b.hasErrors() b.errors.hasFieldErrors('field1') } diff --git a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/UniqueFalseConstraintSpec.groovy b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/UniqueFalseConstraintSpec.groovy index 78362832a1..e4d36b36d3 100644 --- a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/UniqueFalseConstraintSpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/UniqueFalseConstraintSpec.groovy @@ -31,7 +31,7 @@ class UniqueFalseConstraintSpec extends Specification { @Shared @AutoCleanup HibernateDatastore hibernateDatastore = new HibernateDatastore(User) - @Issue('https://github.com/grails/grails-data-mapping/issues/1059') + @Issue('https://github.com/apache/grails-data-mapping/issues/1059') void 'unique:false constraint is ignored and does not behave as unique:true'() { given: 'a user' def user1 = new User(name: 'John') diff --git a/grails-data-hibernate5/core/src/test/groovy/org/grails/datastore/mapping/model/PersistentPropertySpec.groovy b/grails-data-hibernate5/core/src/test/groovy/org/grails/datastore/mapping/model/PersistentPropertySpec.groovy index af89827f7b..d14743ee38 100644 --- a/grails-data-hibernate5/core/src/test/groovy/org/grails/datastore/mapping/model/PersistentPropertySpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/org/grails/datastore/mapping/model/PersistentPropertySpec.groovy @@ -23,7 +23,7 @@ import grails.gorm.tests.HibernateGormDatastoreSpec import grails.persistence.Entity import spock.lang.Issue -@Issue('https://github.com/grails/grails-data-mapping/issues/1299') +@Issue('https://github.com/apache/grails-data-mapping/issues/1299') class PersistentPropertySpec extends HibernateGormDatastoreSpec { void "test isUnidirectionalOneToMany"() { diff --git a/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/HibernateDatastoreMultiTenancySpec.groovy b/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/HibernateDatastoreMultiTenancySpec.groovy index 69a5c9c575..e2fd76ad9d 100644 --- a/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/HibernateDatastoreMultiTenancySpec.groovy +++ b/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/HibernateDatastoreMultiTenancySpec.groovy @@ -24,7 +24,9 @@ import grails.gorm.multitenancy.Tenants import grails.gorm.tests.HibernateGormDatastoreSpec import org.grails.datastore.mapping.multitenancy.MultiTenancySettings import org.grails.datastore.mapping.multitenancy.resolvers.SystemPropertyTenantResolver +import spock.util.environment.RestoreSystemProperties +@RestoreSystemProperties class HibernateDatastoreMultiTenancySpec extends HibernateGormDatastoreSpec { def setupSpec() { @@ -62,9 +64,6 @@ class HibernateDatastoreMultiTenancySpec extends HibernateGormDatastoreSpec { then: result.size() == 1 result[0].tenantId == "tenant2" - - cleanup: - System.clearProperty(SystemPropertyTenantResolver.PROPERTY_NAME) } void "test getDatastoreForConnection throws exception for invalid connection"() { @@ -81,9 +80,6 @@ class HibernateDatastoreMultiTenancySpec extends HibernateGormDatastoreSpec { expect: datastore.resolveTenantIdentifier() == "tenant1" - - cleanup: - System.clearProperty(SystemPropertyTenantResolver.PROPERTY_NAME) } }
