borinquenkid opened a new pull request, #16570: URL: https://github.com/apache/grails-core/pull/16570
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. ๐ค Generated with [Claude Code](https://claude.com/claude-code) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
