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 2729907dde57d1e58ec1f3ce5c9c2a4628187e13
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Thu Jan 29 10:49:01 2026 -0600

    progress
---
 .../orm/hibernate/cfg/GrailsDomainBinder.java      |  4 +-
 .../collectionType/CollectionType.java             | 77 ++++++++++++++++++++++
 .../collectionType/ListCollectionType.java         | 29 ++++++++
 .../collectionType/MapCollectionType.java          | 28 ++++++++
 .../collectionType/SetCollectionType.java          | 29 ++++++++
 5 files changed, 165 insertions(+), 2 deletions(-)

diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index b567795dc7..7c5ba1ecb6 100644
--- 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -997,8 +997,8 @@ public class GrailsDomainBinder implements 
MetadataContributor {
      * @param mappings   The Hibernate mappings instance
      * @param path
      */
-    private void bindCollection(ToMany property, Collection collection,
-                                  PersistentClass owner, 
InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) 
{
+    public void bindCollection(ToMany property, Collection collection,
+                               PersistentClass owner, 
InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) 
{
 
         // set role
         String propertyName = getNameForPropertyAndPath(property, path);
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java
new file mode 100644
index 0000000000..c2e21d63ca
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java
@@ -0,0 +1,77 @@
+package org.grails.orm.hibernate.cfg.domainbinding.collectionType;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+
+import org.hibernate.MappingException;
+import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.boot.spi.MetadataBuildingContext;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+import org.grails.datastore.mapping.model.types.ToMany;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
+import org.grails.orm.hibernate.cfg.Mapping;
+import org.grails.orm.hibernate.cfg.domainbinding.HibernateEntityWrapper;
+import org.grails.orm.hibernate.cfg.domainbinding.TypeNameProvider;
+
+/**
+ * A Collection type, for the moment only Set is supported
+ *
+ * @author Graeme
+ */
+public abstract class CollectionType {
+
+    protected final Class<?> clazz;
+    protected final GrailsDomainBinder binder;
+    protected final MetadataBuildingContext buildingContext;
+
+    private boolean initialized;
+
+    private final Map<Class<?>, CollectionType> INSTANCES = new HashMap<>();
+
+    public abstract Collection create(ToMany property, PersistentClass owner,
+                                      String path, InFlightMetadataCollector 
mappings, String sessionFactoryBeanName) throws MappingException;
+
+    protected CollectionType(Class<?> clazz, GrailsDomainBinder binder) {
+        this.clazz = clazz;
+        this.binder = binder;
+        this.buildingContext = binder.getMetadataBuildingContext();
+    }
+
+    @Override
+    public String toString() {
+        return clazz.getName();
+    }
+
+    private void createInstances() {
+
+        if (initialized) {
+            return;
+        }
+
+        initialized = true;
+
+        CollectionType set = new SetCollectionType(binder);
+        INSTANCES.put(Set.class, set);
+        INSTANCES.put(SortedSet.class, set);
+
+        INSTANCES.put(List.class, new ListCollectionType(binder));
+        INSTANCES.put(java.util.Collection.class, new 
BagCollectionType(binder));
+        INSTANCES.put(Map.class, new MapCollectionType(binder));
+    }
+
+    public CollectionType collectionTypeForClass(Class<?> clazz) {
+        createInstances();
+        return INSTANCES.get(clazz);
+    }
+
+    public String getTypeName(ToMany property) {
+        Mapping mapping = new 
HibernateEntityWrapper().getMappedForm(property.getOwner());
+        return new TypeNameProvider().getTypeName(property, mapping);
+    }
+
+}
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java
new file mode 100644
index 0000000000..68fd9e0baf
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java
@@ -0,0 +1,29 @@
+package org.grails.orm.hibernate.cfg.domainbinding.collectionType;
+
+import java.util.List;
+
+import org.hibernate.MappingException;
+import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+import org.grails.datastore.mapping.model.types.ToMany;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
+
+public class ListCollectionType extends CollectionType {
+
+    public ListCollectionType(GrailsDomainBinder binder) {
+        super(List.class, binder);
+    }
+
+    @Override
+    public Collection create(ToMany property, PersistentClass owner,
+                             String path, InFlightMetadataCollector mappings, 
String sessionFactoryBeanName) throws MappingException {
+        org.hibernate.mapping.List coll = new 
org.hibernate.mapping.List(buildingContext, owner);
+        coll.setCollectionTable(owner.getTable());
+        coll.setTypeName(getTypeName(property));
+        binder.bindCollection(property, coll, owner, mappings, path, 
sessionFactoryBeanName);
+        return coll;
+    }
+
+}
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java
new file mode 100644
index 0000000000..22de22b5c9
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java
@@ -0,0 +1,28 @@
+package org.grails.orm.hibernate.cfg.domainbinding.collectionType;
+
+import java.util.Map;
+
+import org.hibernate.MappingException;
+import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+import org.grails.datastore.mapping.model.types.ToMany;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
+
+public class MapCollectionType extends CollectionType {
+
+    public MapCollectionType(GrailsDomainBinder binder) {
+        super(Map.class, binder);
+    }
+
+    @Override
+    public Collection create(ToMany property, PersistentClass owner,
+                             String path, InFlightMetadataCollector mappings, 
String sessionFactoryBeanName) throws MappingException {
+        org.hibernate.mapping.Map map = new 
org.hibernate.mapping.Map(buildingContext, owner);
+        map.setTypeName(getTypeName(property));
+        binder.bindCollection(property, map, owner, mappings, path, 
sessionFactoryBeanName);
+        return map;
+    }
+
+}
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java
new file mode 100644
index 0000000000..956521a785
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java
@@ -0,0 +1,29 @@
+package org.grails.orm.hibernate.cfg.domainbinding.collectionType;
+
+import java.util.Set;
+
+import org.hibernate.MappingException;
+import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+import org.grails.datastore.mapping.model.types.ToMany;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
+
+public class SetCollectionType extends CollectionType {
+
+    public SetCollectionType(GrailsDomainBinder binder) {
+        super(Set.class, binder);
+    }
+
+    @Override
+    public Collection create(ToMany property, PersistentClass owner,
+                             String path, InFlightMetadataCollector mappings, 
String sessionFactoryBeanName) throws MappingException {
+        org.hibernate.mapping.Set coll = new 
org.hibernate.mapping.Set(buildingContext, owner);
+        coll.setCollectionTable(owner.getTable());
+        coll.setTypeName(getTypeName(property));
+        binder.bindCollection(property, coll, owner, mappings, path, 
sessionFactoryBeanName);
+        return coll;
+    }
+
+}

Reply via email to