Skip to content

Hibernate 7: delete the classic domain binder - #16570

Open
borinquenkid wants to merge 35 commits into
9.0.x-h7-native-defaultfrom
9.0.x-h7-improvement-phase3
Open

borinquenkid wants to merge 35 commits into
9.0.x-h7-native-defaultfrom
9.0.x-h7-improvement-phase3

Conversation

@borinquenkid

@borinquenkid borinquenkid commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

Stacked PR — depends on #16569, which depends on #16568, which depends on #16572. This branch is based on 9.0.x-h7-native-default (#16569), so until the predecessors merge the diff shown here includes theirs. Merge order: #16572 → #16568 (opt-in native binding) → #16569 (native binding by default) → this PR (delete the classic binder).

Last PR of the native domain binding stack. 6 commits, 262 files, +3,488 / −18,648.

What

The classic GrailsDomainBinder and everything that existed only to assemble Hibernate's boot model by hand are deleted. Native binding is the only binding of GORM for Hibernate 7.

Changes

  • Deleted (65 main files in grails-data-hibernate7/core): GrailsDomainBinder, the binder, secondpass and collectionType packages and their utilities, the hibernate.generatedDomainClasses switch and the classic code path in HibernateMappingContextConfiguration, HibernateDatastore and the test harness.
  • Kept and moved: the four column binders the generator reuses (cfg/domainbinding/column/), ManyToManyOwnerValidator (jpa/); the one piece of GrailsDomainBinder the native path needed is extracted as GormMappingContributor (the AdditionalMappingContributor). The hibernate metamodel package is untouched.
  • Compatibility: an application that still sets hibernate.generatedDomainClasses, with either value, boots natively and logs one WARN naming the setting; the configuration metadata keeps the key as deprecated at level error so IDEs flag it.
  • Tests: the 27 both-modes specs state the classic facts they compared against as literal expectations (captured from runs); about 60 unit specs of the deleted classes are gone, their @Entity fixtures preserved so the oracle keys do not change; the 94 duplicate "widened" subclasses that only existed to run their parents natively are gone (test count 4,597 → 4,104 for that reason).
  • Frozen classic oracle: FROZEN is the only comparison mode. A new fixture is recorded from a native boot with -Pgrails.test.recordClassicOracle=true; native-recorded sections are reported, not compared, by the generator differential (there is no classic fact to compare them with). Documented in the module README.
  • Docs: the manual chapter now describes native binding as the only binding and the classic binding of Grails 8 as what changed; configuration reference (key removed, ignored with a warning), migration checklist, upgrade notes §1.3–1.5, the Hibernate developer skill.

Verification

At the tip, uncached: core 4,104 tests / 0 failures; generator differential 0 mismatches (1,169 entities, 3,381 properties); DDL differential 85 known, 0 unknown, 0 refused; dbmigration-core 40, dbmigration 109 + 93 CLI, plugin 39 + 2, spring-boot 2; 22 example apps' unit tests and 19 integration suites green except app1's 21 pre-existing GSP failures (same set and counts as before the stack); codeStyle clean; rat's 69 unapproved files are the ones already present at the base, in modules this stack never touched.

Known follow-up

An inverse hasMany on an entity whose composite identifier is not declared in name order loads empty on 8.0.x as well (#16565); native binding is not affected by the classic linker, but the issue is tracked separately.

Merge of the Java-to-Groovy review follow-up (#16572)

Merged up from #16569 (which contains #16568, the reviewed #16572 and 9.0.x, including upstream fixes #16533 and #16539). Conflicts were resolved in favour of native binding as the only binding: the oracle files are taken from #16569, and the doc and spec changes are carried into the renamed specs (for example ColumnOptionSpec).

Verified at the tip: core 4,250 tests (51 skipped), plugin 39, dbmigration-core 41, 0 failures.

🤖 Generated with Claude Code

Copilot AI balanced review requested due to automatic review settings October 10, 2026 00:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Four newly added fixture files violate enabled CodeNarc rules and would fail the repository style gate.

4 open findings
What changed in this PR

Removes Hibernate 7’s classic domain-binding stack, making native binding the sole implementation while retaining compatibility warnings and frozen-oracle coverage.

Changes:

  • Deletes classic binders, second passes, collection types, and obsolete dual-mode tests.
  • Extracts reusable native-binding infrastructure and preserves oracle fixtures.
  • Updates configuration metadata, migration documentation, and tests for native-only behavior.
File Description
.agents/​skills/​hibernate-developer/​SKILL.md Updates native-binding guidance.
gradle/​hibernate7-test-config.gradle Removes classic-mode test wiring.
grails-data-hibernate7/​README.md Documents frozen oracle recording.
grails-data-hibernate7/​core/​classic-only-specs.txt Removes classic-only test list.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​HibernateMappingContextConfiguration.groovy Makes native binding unconditional.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ClassBinder.groovy Deletes classic class binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ClassPropertiesBinder.groovy Deletes classic property binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​CollectionBinder.groovy Deletes classic collection binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ColumnBinder.groovy Deletes classic column binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ComponentBinder.groovy Deletes classic component binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ComponentUpdater.groovy Deletes classic component updater.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​CompositeIdBinder.groovy Deletes classic composite-ID binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​CompositeIdentifierToManyToOneBinder.groovy Deletes classic composite-association binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ConfiguredDiscriminatorBinder.groovy Deletes discriminator binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​DefaultDiscriminatorBinder.groovy Deletes default discriminator binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​DiscriminatorPropertyBinder.groovy Deletes discriminator-property binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​EnumTypeBinder.groovy Deletes enum binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ForeignKeyOneToOneBinder.groovy Deletes one-to-one binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​GrailsDomainBinder.groovy Deletes classic binding entry point.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​GrailsPropertyBinder.groovy Deletes classic GORM property binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​IdentityBinder.groovy Deletes identity binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​JoinedSubClassBinder.groovy Deletes joined-subclass binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ManyToOneBinder.groovy Deletes many-to-one binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​NaturalIdentifierBinder.groovy Deletes natural-ID binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​OneToOneBinder.groovy Deletes one-to-one binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​PropertyBinder.groovy Deletes classic Hibernate property binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​RootBinder.groovy Deletes root-class binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​RootPersistentClassCommonValuesBinder.groovy Deletes root-value binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SimpleIdBinder.groovy Deletes simple-ID binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SimpleValueBinder.groovy Deletes simple-value binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SimpleValueColumnBinder.groovy Deletes simple-column binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SingleTableSubclassBinder.groovy Deletes single-table binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SubClassBinder.groovy Deletes subclass binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SubclassMappingBinder.groovy Deletes subclass dispatcher.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​UnionSubclassBinder.groovy Deletes union-subclass binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​VersionBinder.groovy Deletes version binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​CollectionHolder.groovy Deletes collection-type registry.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​CollectionType.groovy Deletes classic collection abstraction.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​column/​ColumnConfigToColumnBinder.groovy Moves reusable column binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​column/​IndexBinder.groovy Moves reusable index binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​column/​NumericColumnConstraintsBinder.groovy Moves numeric constraints binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​column/​StringColumnConstraintsBinder.groovy Moves string constraints binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​GrailsHibernatePersistentEntity.groovy Relocates discriminator constant.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateBasicEnumProperty.groovy Updates binder-neutral documentation.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateEmbeddedCollectionProperty.groovy Updates binder-neutral documentation.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateEnumProperty.groovy Updates enum-binding documentation.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateMappingBuilder.groovy Removes classic-binder reference.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateToManyProperty.groovy Uses relocated naming constants.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateVersionProperty.groovy Updates version-binding documentation.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ConstraintFacets.groovy Updates index documentation.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GeneratedDomainClassBinder.groovy Adopts extracted native helpers.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GormMappingContributor.groovy Adds native mapping contributor.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGenerator.groovy Updates moved helpers and native logic.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ManyToManyOwnerValidator.groovy Moves ownership validator.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​PropertyAccessorName.groovy Extracts property-accessor selection.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​UniqueKeyFacets.groovy Updates classic behavior description.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BasicCollectionElementBinder.groovy Deletes classic second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BidirectionalMapElementBinder.groovy Deletes classic second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BidirectionalOneToManyLinker.groovy Deletes classic linker.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyBinder.groovy Deletes classic key binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyColumnUpdater.groovy Deletes classic key updater.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionSecondPassBinder.groovy Deletes classic second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionWithJoinTableBinder.groovy Deletes join-table binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​DependentKeyValueBinder.groovy Deletes dependent-key binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​HibernateToManyEntityOrderByBinder.groovy Deletes ordering binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ListSecondPass.groovy Deletes list second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ListSecondPassBinder.groovy Deletes list binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ManyToOneElementBinder.groovy Deletes element binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​MapSecondPass.groovy Deletes map second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​MapSecondPassBinder.groovy Deletes map binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​PrimaryKeyValueCreator.groovy Deletes classic key creator.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​SetSecondPass.groovy Deletes set second pass.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ToManyEntityMultiTenantFilterBinder.groovy Deletes classic tenant binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyBinder.groovy Deletes one-to-many binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyInverseValuesBinder.groovy Deletes inverse-values binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​DefaultColumnNameFetcher.groovy Exposes shared naming constants.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​GrailsPropertyResolver.groovy Deletes classic property resolver.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​MultiTenantFilterBinder.groovy Deletes classic tenant-filter binder.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​NamingStrategyWrapper.groovy Uses relocated naming constant.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​OrderByClauseBuilder.groovy Deletes classic ordering helper.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​PropertyFromValueCreator.groovy Deletes classic property creator.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​TableForManyCalculator.groovy Uses relocated naming constant.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​connections/​HibernateConnectionSourceFactory.groovy Warns about removed setting.
grails-data-hibernate7/​core/​src/​main/​groovy/​org/​grails/​orm/​hibernate/​connections/​HibernateConnectionSourceSettings.groovy Removes binding switch.
grails-data-hibernate7/​core/​src/​main/​resources/​META-INF/​additional-spring-configuration-metadata.json Deprecates removed setting.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​HibernateGormDatastoreSpec.groovy Removes classic test helpers.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesAnnotatedClassesSpec.groovy Removes mode setting.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesBinderLeniencySpec.groovy Converts to native-only expectations.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesBootSpec.groovy Tests native-only boot.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCacheRegionSpec.groovy Freezes classic expectations.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCircularManyToManySpec.groovy Freezes native behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCollectionConstraintsSpec.groovy Replaces dual-mode comparisons.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCollectionIndexTypeSpec.groovy Replaces dual-mode comparisons.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCollectionSortSpec.groovy Uses literal classic ordering.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCollectionTypeSpec.groovy Converts collection tests to native-only.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCompositeCollectionSpec.groovy Converts composite tests to native-only.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCompositeIdSpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesContributorSpec.groovy Tests native contributor only.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesConverterClassSpec.groovy Removes classic-mode comparison.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesConverterSpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateManyToManyPropertySpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateOneToManyPropertySpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernatePersistentEntitySpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateToManyPropertySpec.groovy Removes classic collection assumptions.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ClassicOracle.groovy Makes frozen/record modes native-only.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ClassicOracleSpec.groovy Tests frozen-oracle lifecycle.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ColumnOptionSpec.groovy Renames resolved behavior spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GeneratedDomainClassesDdlDifferentialSpec.groovy Reads frozen DDL oracle.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainBinderCompositeIdDefectSpec.groovy Removes classic-defect spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainBinderEmbeddedCollectionDefectSpec.groovy Removes classic-defect spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorCompositeIdSpec.groovy Updates classic references.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorDifferentialSpec.groovy Compares against frozen oracle.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorSpec.groovy Removes classic-mode helpers.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorSupport.groovy Uses mapping contributor.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorTenantSpec.groovy Uses moved column helpers.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​GrailsDomainGeneratorUniqueGroupSpec.groovy Freezes classic unique-key facts.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​ManyToManyOwnershipSpec.groovy Converts defect test to behavior test.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​PropertyAccessorNameSpec.groovy Tests extracted accessor logic.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​UnidirectionalBasicCollectionsSpec.groovy Converts defect test to behavior test.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​jpa/​UnidirectionalEntityCollectionsSpec.groovy Enables native behavior coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BasicCollectionElementBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BasicCollectionElementBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BasicCollectionKeyPersistenceSpec.groovy Updates regression documentation.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BidirectionalMapElementBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BidirectionalMapElementBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​BidirectionalOneToManyLinkerSpec.groovy Removes classic linker spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyColumnUpdaterFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionKeyColumnUpdaterSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionSecondPassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionSecondPassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionWithJoinTableBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​CollectionWithJoinTableBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​DependentKeyValueBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​DependentKeyValueBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​HibernateToManyEntityOrderByBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​HibernateToManyEntityOrderByBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ListSecondPassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ListSecondPassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ManyToOneElementBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ManyToOneElementBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​MapSecondPassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​MapSecondPassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​PrimaryKeyValueCreatorSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ToManyEntityMultiTenantFilterBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​ToManyEntityMultiTenantFilterBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyInverseValuesBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​secondpass/​UnidirectionalOneToManyInverseValuesBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​GrailsPropertyResolverSpec.groovy Removes classic utility spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​MultiTenantFilterBinderSpec.groovy Removes classic filter spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​util/​MultiTenantFilterDefinitionBinderSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​connections/​HibernateConnectionSourceSettingsSpec.groovy Tests removed setting metadata.
grails-data-hibernate7/​core/​src/​test/​resources/​simplelogger.properties Removes deleted binder logger.
grails-data-hibernate7/​dbmigration/​src/​test/​groovy/​org/​grails/​plugins/​databasemigration/​generated/​GeneratedModeEnversSpec.groovy Converts Envers test to native-only.
grails-data-hibernate7/​dbmigration/​src/​test/​groovy/​org/​grails/​plugins/​databasemigration/​generated/​GeneratedModeSnapshotSpec.groovy Converts snapshot test to native-only.
grails-data-hibernate7/​docs/​src/​docs/​asciidoc/​advancedGORMFeatures/​nativeDomainBinding.adoc Documents native-only binding.
grails-data-hibernate7/​docs/​src/​docs/​asciidoc/​configuration/​configurationReference.adoc Marks old setting ignored.
grails-data-hibernate7/​docs/​src/​docs/​asciidoc/​gettingStarted/​hibernateVersions.adoc Updates migration checklist.
grails-doc/​src/​en/​guide/​upgrading/​upgrading90x.adoc Updates Grails 9 upgrade guidance.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesCustomCollectionTypeSpec.groovy Freezes native collection behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesDdlSpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesDiscriminatorSpec.groovy Replaces dual-mode assertions.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesEmbeddedCollectionSpec.groovy Replaces dual-mode assertions.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesEmbeddedIdWorkaroundSpec.groovy Freezes embedded-ID behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesExtraLazySpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesJoinColumnSpec.groovy Replaces dual-mode assertions.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesLazyEmbeddedSpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesMapManyToManySpec.groovy Converts to native-only behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesMultiDataSourceSpec.groovy Removes per-mode data sources.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesMultiTenancySpec.groovy Removes classic-mode parameterization.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesNaturalIdSpec.groovy Converts natural-ID expectations.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesQuerySpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesSerializableTypeSpec.groovy Converts serialization coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesSerializationSpec.groovy Removes mode comparison.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesSharedEmbeddedCollectionSpec.groovy Freezes shared-embedding behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesSpec.groovy Uses standard registration.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesTenancyModesSpec.groovy Converts tenancy coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesTenantTypeSpec.groovy Converts tenant-type coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesTypeMismatchSpec.groovy Converts mismatch coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesTypeParametersSpec.groovy Converts parameter coverage.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesWidenedSpecs.groovy Removes duplicate native subclasses.
grails-data-hibernate7/​core/​src/​test/​groovy/​grails/​gorm/​tests/​generated/​GeneratedDomainClassesWriteFlagsSpec.groovy Freezes write-flag behavior.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​apache/​grails/​data/​hibernate7/​core/​GrailsDataHibernate7TckManager.groovy Removes classic-mode TCK switch.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​UserTypeMappingSpec.groovy Updates binder terminology.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​GeneratedDomainClassesSettingSpec.groovy Tests ignored-setting warning.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​GrailsHibernatePersistentPropertySpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​HibernateMappingContextConfigurationSpec.groovy Confirms switch removal.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​MappingSpec.groovy Removes classic binder helper.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​NaturalIdSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​BasicValueCreatorSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CascadeBehaviorFetcherSpec.groovy Removes classic binder argument.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ClassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CollectionBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CollectionBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CollectionForPropertyConfigBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ColumnBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ColumnBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ColumnConfigToColumnBinderSpec.groovy Updates moved import.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ComponentBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CompositeIdBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​CompositeIdentifierToManyToOneBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​DefaultColumnNameFetcherSpec.groovy Updates literal expectations.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​EnumTypeBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​EnumTypeBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ForeignKeyOneToOneBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​GrailsIdentityGeneratorSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​GrailsPropertyBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​GrailsPropertyBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​IdentityBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​IndexBinderSpec.groovy Updates moved import.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ManyToOneBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​ManyToOneValuesBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​NamingStrategyWrapperSpec.groovy Uses relocated naming constant.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​NaturalIdentifierBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​NumericColumnConstraintsBinderSpec.groovy Updates moved import.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​OneToOneBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​OrderByClauseBuilderSpec.groovy Removes classic utility spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​PropertyBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​PropertyBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​PropertyFromValueCreatorSpec.groovy Removes classic utility spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​SimpleIdBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​SimpleValueBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​SimpleValueColumnBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​SimpleValueColumnFetcherSpec.groovy Removes classic utility spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​StringColumnConstraintsBinderSpec.groovy Updates moved import.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​TableForManyCalculatorSpec.groovy Updates literal expectations.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​VersionBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​VersionBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ClassPropertiesBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ComponentUpdaterFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ComponentUpdaterSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ConfiguredDiscriminatorBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ConfiguredDiscriminatorBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​DefaultDiscriminatorBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​DiscriminatorPropertyBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​DiscriminatorPropertyBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​JoinedSubClassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​JoinedSubClassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​ManyToManyWithoutOwnerSpec.groovy Removes classic-mode branch.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​RootBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​RootPersistentClassCommonValuesBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​RootPersistentClassCommonValuesBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SingleTableSubclassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SingleTableSubclassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SubClassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SubclassMappingBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​SubclassMappingBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​UnionSubclassBinderFixtures.groovy Preserves deleted-spec entities.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​binder/​UnionSubclassBinderSpec.groovy Removes classic unit spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​BagCollectionTypeSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​CollectionHolderSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​ListCollectionTypeSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​MapCollectionTypeSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​SetCollectionTypeSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​collectionType/​SortedSetCollectionTypeSpec.groovy Removes deleted-type spec.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​generator/​GrailsSequenceStyleGeneratorSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​generator/​GrailsTableGeneratorSpec.groovy Uses mapping contributor context.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateBasicPropertySpec.groovy Reworks enum collection-table test.
grails-data-hibernate7/​core/​src/​test/​groovy/​org/​grails/​orm/​hibernate/​cfg/​domainbinding/​hibernate/​HibernateEmbeddedCollectionPropertySpec.groovy Uses mapping contributor context.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@codecov

codecov Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 61.0544%. Comparing base (e523296) to head (e60ecee).

Additional details and impacted files

Impacted file tree graph

@@                        Coverage Diff                        @@
##             9.0.x-h7-native-default     #16570        +/-   ##
=================================================================
- Coverage                    61.0675%   61.0544%   -0.0132%     
+ Complexity                     27175      27161        -14     
=================================================================
  Files                           2282       2282                
  Lines                         113982     113982                
  Branches                       20636      20636                
=================================================================
- Hits                           69606      69591        -15     
- Misses                         35171      35186        +15     
  Partials                        9205       9205                

see 10 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

borinquenkid and others added 6 commits October 10, 2026 11:18
…ed against as literal expectations

The classic domain binder is being deleted from 9.0.x. 33 specs booted a datastore
through it next to a native one and asserted "the same as classic": the schema maps,
the join tables, the cache regions, the stored rows. Their classic half is replaced by
the values those comparisons held at eb82a95 (every equality passed in the last
classic run of the suite; the values that only a classic boot could give, such as the
H2 script of the embedded-identifier entity native binding refuses, were recorded from
one more classic boot before the deletion). Whole-schema equalities are left to
GeneratedDomainClassesDdlDifferentialSpec, which compares every one of these fixtures
with the recorded classic schema.

The five specs that could only run against a classic datastore (classic-only-specs.txt)
either pinned classic defects with @PendingFeature, which native binding does not have
(the pins are deleted or become plain behaviour specs: UnidirectionalEntityCollectionsSpec,
UnidirectionalBasicCollectionsSpec, ColumnOptionSpec, ManyToManyOwnershipSpec), or read
the Hibernate collection the classic binder left on the metamodel, which the generator
specs now build by hand or no longer assert. The list is empty, so it goes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…setting that selected the classic one is ignored with a warning

hibernate.generatedDomainClasses selected the classic domain binder of Grails 8 when set to
false. The classic binder is being deleted, so the switch goes first: HibernateMappingContextConfiguration
always binds through the generated classes, HibernateConnectionSourceSettings has no such field
and the test-only JVM property grails.hibernate.classicDomainBinding is gone with it. An
application upgraded from Grails 8 that still sets the key, with either value or on a named
data source, boots natively and HibernateConnectionSourceFactory logs once per data source that
the setting is no longer used (GeneratedDomainClassesSettingSpec). The configuration metadata
keeps the key as deprecated at level error, so an IDE flags it.

The test infrastructure loses its two modes: the TCK manager's CLASSIC_MODE_PROPERTY and
registerGeneratedDomainClasses, the Gradle property grails.test.classicDomainBinding and the
classic-only exclusion, and GeneratedDomainClassesWidenedSpecs, whose 94 subclasses only ran
their parents natively while classic was the default and now duplicated them. The two
dbmigration specs that booted both bindings state the native snapshot, change log and Envers
audit tables literally.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Native domain binding is the only binding since the previous commit, so the code that
built Hibernate's boot model by hand goes: GrailsDomainBinder and the 31 binders of
cfg/domainbinding/binder, the 20 second passes, the 7 collection types and the 5 helpers
of util only they used, with their 60 unit specs. What the native path used of them is
kept under names that say what it is: GormMappingContributor (jpa) is the
AdditionalMappingContributor named GORM that GrailsDomainBinder was in native mode (it
caches the mappings, resolves the naming strategy and hands the entities to
GeneratedDomainClassBinder); PropertyAccessorName (jpa) is the accessor decision of
PropertyBinder; the four column helpers the generator and the aligner share move to
cfg/domainbinding/column; ManyToManyOwnerValidator moves next to the aligner; the naming
constants live on DefaultColumnNameFetcher, the default discriminator column name on
GrailsHibernatePersistentEntity, and the enum class parameter is IdentityEnumType's.

The @entity fixtures the deleted unit specs declared stay in *Fixtures files of the same
packages: the differential specs scan them and the frozen classic oracle records them,
so both differentials keep their 799 groups, 0 mismatches and 85 known differences.
Comments that described what the generator mirrors name the classic binders no more.
HibernateGormDatastoreSpec offers getMappingContributor() in place of the binder and
loses the classic re-bind of hibernateFirstPass(); HibernateToManyPropertySpec reads the
metamodel without it. The hibernate-developer skill describes the native classes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…recorded from a native boot

The classic binder is gone, so the VERIFY and REFREEZE modes of ClassicOracle, which booted
it, go too. The recorded files stay the oracle of the two differential specs (FROZEN, the
default: 799 groups, 0 mismatches, 85 known differences, 0 unknown, 0 refused, as before).

A contributor who adds an @entity fixture records it with -Pgrails.test.recordClassicOracle=true:
RECORD boots only the scanned groups that have no record, natively, writes their facts at
their place in the scan order with the header marked source: native, drops the records of
groups no fixture makes up any more, and writes every other record back byte for byte, so
the diff to review is additions. The DDL differential compares such a group with its own
recorded schema, so a later change of native binding shows up as an unknown difference; the
generator differential reports it instead of comparing facets only a classic boot could give
(Hibernate's binder fills in a discriminator value, a cache strategy and a length on the
version that the classic binder never stated). ClassicOracleSpec proves the three RECORD
behaviours on a copy of the file and skips its completeness checks during a recording run,
whose classpath still holds the old file. Exercised end to end with a throwaway fixture:
10 lines added, none removed, and the FROZEN rerun green with the record in place.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…sic binding of Grails 8 is gone

The Native Domain Binding chapter no longer offers a fallback: it says what changed from the
classic binding of Grails 8 (the unsupported mappings, which the classic binding could not use
either, the changes in behaviour and in the schema, the Envers differences), and that the
hibernate.generatedDomainClasses setting is ignored with a warning. The configuration
reference and the Hibernate versions checklist say the same, and the 9.0.x upgrade notes
drop the temporary fallback: an application whose mappings or database need work stays on
Grails 8 until it is done. Both manuals built; the rendered pages were grepped.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tive binding gives, as measured

The literals that 955a1df wrote into GeneratedModeEnversSpec when it dropped the classic
half of the spec were not captured from a run: that commit's verification never executed the
spec, and the full module run of the deletion step failed three of its features. The values
were therefore measured at eb82a95, the step 2 tip, in a throwaway worktree, native default
and classic binding both, and are identical to HEAD's:

- envers_book_aud: [class, genre, id, pages, rev, revtype, title, version] natively (classic
  had secret in addition, the @NotAudited field Envers read through the getter); class and
  genre are the discriminator and the subclass column of the single-table hierarchy
  EnversNovel extends EnversBook, which shares the audit table
- the version written at the revisions of EnversVersioned and EnversCustomVersion:
  [[0, 0], [1, 1], [1, 2], [2, null]], null at the DEL revision because Envers stores no
  property data there unless store_data_at_delete is set, in both bindings
- the columns of the other audit tables: [id, name, rev, revtype, version],
  [id, name, rev, revtype] and [id, lock_no, name, rev, revtype], the same in both bindings

So the deletion of the classic binder changed no Envers behaviour; the spec now states the
measured values. The dbmigration module passes (109 tests, 93 CLI tests).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@borinquenkid
borinquenkid force-pushed the 9.0.x-h7-improvement-phase3 branch from 4b744e6 to a9ed040 Compare October 10, 2026 16:49
@borinquenkid

Copy link
Copy Markdown
Member Author

Rebuilt on #16572 (the Hibernate 7 modules converted to Groovy), as the maintainers asked to split the migration. The history of this branch was rewritten and force-pushed: please re-fetch and re-review from the new head rather than rebasing local work onto the old one. The content of the native-binding work is unchanged.

borinquenkid and others added 2 commits October 10, 2026 12:32
…c-binder-v2

# Conflicts:
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleValueBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionHolder.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderFixtures.groovy
…I spec

GrailsDomainBinder, RootPersistentClassCommonValuesBinder and CollectionHolder
no longer exist on this branch, so their pins go with them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
borinquenkid and others added 5 commits October 10, 2026 13:25
…n of four binder fixture files

Copilot's review of the deletion PR: BasicCollectionElementBinderFixtures and
CollectionWithJoinTableBinderFixtures imported org.hibernate.mapping.Set but name java.util.Set
explicitly everywhere; MapSecondPassBinderFixtures had two consecutive blank lines and
UnidirectionalOneToManyBinderFixtures a trailing semicolon, which CodeNarc's UnnecessaryImport-style,
ConsecutiveBlankLines and UnnecessarySemicolon rules reject.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@borinquenkid borinquenkid added this to the grails:9.0.0-M1 milestone Oct 11, 2026
borinquenkid and others added 5 commits October 13, 2026 17:52
The classic binder this branch deletes is deleted here as well, with the Groovy
conversion and review fixes that touched it; upgrading90x.adoc keeps the Hibernate 7
notes as section 2.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e merge, drop a pending feature that passes

The discriminator, unique group, composite foreign key and inverse hasMany fixtures are new to the
frozen oracle; they are recorded with -Pgrails.test.recordClassicOracle=true and carry source: native
(the diff is additions only). InverseHasManyCompositeIdentifierOrderSpec tracked a classic binder
defect that native binding does not have, so it is no longer @PendingFeature.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ovement-phase3

# Conflicts:
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy
@jdaugherty

Copy link
Copy Markdown
Contributor

@borinquenkid can you give history on this change and why it's required / should go into 9? We will likely release 9 at the end of Nov and this is a rather large change. Help me understand why we need this.

@jdaugherty
jdaugherty added this pull request to stack #16655 October 16, 2026 00:21
@borinquenkid
borinquenkid removed this pull request from stack #16655 October 16, 2026 02:32
@borinquenkid
borinquenkid added this pull request to stack #16657 October 16, 2026 02:32
@borinquenkid
borinquenkid removed this pull request from stack #16657 October 16, 2026 02:33
@borinquenkid
borinquenkid added this pull request to stack #16658 October 16, 2026 02:33
borinquenkid and others added 2 commits October 15, 2026 21:49
The classic binder stays deleted, phase3's moved IndexBinder and idiomatic sources win the
style-only conflicts, and upgrading90x.adoc keeps the phase3 wording with the renumbered section.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@borinquenkid
borinquenkid marked this pull request as draft October 19, 2026 01:22
@borinquenkid
borinquenkid marked this pull request as ready for review October 20, 2026 02:09
@borinquenkid

Copy link
Copy Markdown
Member Author

BLOCKER before merge: this branch carries a temporary CI commit.

This PR is stacked, and to avoid starting a full CI matrix on every push or rebase of the stack it carries one temporary commit, CHANGEME FOR ACCEPTANCE: disable PR workflow triggers. It changes the pull_request: trigger of 13 workflows to branches: ['CHANGEME-FOR-ACCEPTANCE'], a branch that does not exist, so pushing, rebasing or force-pushing this branch starts no jobs.

Condition for merging this PR: that commit must be reverted on this branch first, and CI must then run and be green. The absence of CI checks on this PR is deliberate and does not mean the code was tested. The full build runs on #16576 and #16572, the PRs that target 10.0.x.

# Conflicts:
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionKeyColumnUpdater.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionKeyColumnUpdaterSpec.groovy
# Conflicts:
#	.agents/skills/hibernate-developer/SKILL.md
#	grails-data-hibernate7/core/classic-only-specs.txt
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/column/CompositeUserTypeBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/jpa/GrailsDomainGenerator.groovy
#	grails-data-hibernate7/core/src/test/groovy/grails/gorm/tests/generated/GeneratedDomainClassesSerializationSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/jpa/UnidirectionalEntityCollectionsSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
…ic binder, follow the assignability check of a deserialized proxy

The oracle recorded the fixtures of GrailsPropertyBinderSpec and the collection-key updater spec, which this branch
deleted with the classic binder; RECORD mode drops them. A deserialized proxy is a plain instance of the real class,
which the serialization spec now states as assignability rather than as the direct superclass.
# Conflicts:
#	grails-data-hibernate7/core/classic-only-specs.txt
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionKeyColumnUpdater.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionKeyColumnUpdaterSpec.groovy
#	grails-data-hibernate7/core/src/test/resources/classic-oracle/ddl-differential.txt
#	grails-data-hibernate7/core/src/test/resources/classic-oracle/generator-differential.txt
MuhAccount and MuhNote join the MuhItem group, now keyed MuhAccount.
# Conflicts:
#	.agents/skills/hibernate-developer/SKILL.md
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/jpa/GrailsDomainGeneratorDifferentialSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/jpa/GrailsDomainGeneratorSpec.groovy
# Conflicts:
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.groovy
#	grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ToManyEntityMultiTenantFilterBinder.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneValuesBinderSpec.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderFixtures.groovy
#	grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ToManyEntityMultiTenantFilterBinderSpec.groovy
…ver the 8.x warning spec

The 10.0.x merge brought ManyToManyWithoutOwnerWarningSpec, which expects
the Grails 8 behaviour: a bidirectional many-to-many with no belongsTo on
either side binds, and the binder logs one warning. On this branch such a
mapping refuses to start with a MappingException that names both sides
(ManyToManyOwnerValidator, documented in manyToMany.adoc and
hibernateVersions.adoc, covered by ManyToManyWithoutOwnerSpec including the
circular and the Map-sided cases), so the warning spec cannot pass and its
cases are already covered. The spec goes; its Warn* fixtures went with it,
so the classic oracle no longer expects them.

The oracle also drops the record of SingleTableSubClassDefault, whose
classic fixture left with the classic binder in the same merge.
…e tenant in the native binding

The native binding gave the tenant filter only to a one-to-many of a
multi-tenant entity. The classic binder of 8.0.x (#16515) filters every
collection of a multi-tenant entity, a many-to-many too, and loads a
collection mapped fetch: 'join' eagerly with a select of its own, because
Hibernate does not apply the filter to a collection it fetches by join with
an instance loaded by id. The generator now does the same: the tenant
condition goes on any to-many whose target is multi-tenant, and a
join-fetched one becomes an eager @fetch(SELECT). On a collection with a
join table Hibernate's annotation binder turns @filter into the many-to-many
filter, which is what the classic binder bound.

GrailsDomainGeneratorTenantSpec covers the many-to-many, the one-to-many,
the eager select and an unfiltered collection, on the generated fields and
in the metadata Hibernate reads from them. The classic oracle records the
new fixtures, and the frozen fact of CMTBManyToManyOwner.items now states
the many-to-many filter the 8.0.x classic binder binds for it.
…in the native binding

Mirror of #16720 (fix/enum-unique-group-multicolumn-8.0.x, #16713) on the
native-binding branch, ahead of its merge-up. CreateKeyForProps, which the
generator's constraint facets still use, adds each configured column of a
unique-group member to the key instead of asking the single-column accessor,
which threw for a to-one association mapped to more than one column; a
member without explicit columns keeps the fallback.

EnumUniqueGroupAssociationSpec from that pull request runs against the
native binding here, and the classic oracle records its fixtures.
@testlens-app

testlens-app Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

🔎 No tests executed 🔎

🏷️ Commit: cd301cb
▶️ Tests: 0 executed
⚪️ Checks: 46/46 completed


Learn more about TestLens at testlens.app/docs.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants