This is an automated email from the ASF dual-hosted git repository. matrei pushed a commit to branch fix/issue-16133 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 07a30bb3eb9d39ab64dd1121567ba025c1bff472 Author: Mattias Reichel <[email protected]> AuthorDate: Fri Aug 14 08:32:40 2026 +0200 fix: preserve bidirectional binding with nullable associations --- .../grails/datastore/mapping/config/AbstractGormMappingFactory.java | 3 ++- .../src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/config/AbstractGormMappingFactory.java b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/config/AbstractGormMappingFactory.java index 9e3f66a649..494bf0e8eb 100644 --- a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/config/AbstractGormMappingFactory.java +++ b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/config/AbstractGormMappingFactory.java @@ -202,7 +202,8 @@ public abstract class AbstractGormMappingFactory<R extends Entity, T extends Pro } else { T property = BeanUtils.instantiateClass(getPropertyMappedFormType()); - if (!GormProperties.IDENTITY.equals(mpp.getName()) && !GormProperties.VERSION.equals(mpp.getName())) { + if (!GormProperties.IDENTITY.equals(mpp.getName()) && + !GormProperties.VERSION.equals(mpp.getName())) { property.setNullable(defaultNullable); } return property; diff --git a/grails-web-databinding/src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy b/grails-web-databinding/src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy index 80a87452dd..ec86f0860b 100644 --- a/grails-web-databinding/src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy +++ b/grails-web-databinding/src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy @@ -586,7 +586,7 @@ class GrailsWebDataBinder extends SimpleDataBinder { otherSide = ((Association) property).inverseSide } } - if (otherSide != null && List.isAssignableFrom(otherSide.getType()) && !property.isNullable()) { + if (otherSide != null && List.isAssignableFrom(otherSide.getType())) { DeferredBindingActions.addBindingAction(new Runnable() { void run() { if (obj[propName] != null && otherSide instanceof OneToMany) {
