You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2025/07/10 03:01:58 UTC
(grails-core) 20/22: refactoring and testing TypeNameProvider
This is an automated email from the ASF dual-hosted git repository.
borinquenkid pushed a commit to branch merge-hibernate6
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit de9934e174400c8952aadf88e27a04b9748be336
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Mon Jul 7 22:53:29 2025 -0500
refactoring and testing TypeNameProvider
---
.../hibernate/cfg/AbstractGrailsDomainBinder.java | 2 +-
.../orm/hibernate/cfg/GrailsDomainBinder.java | 141 ++++++++-------------
.../ConfigureDerivedPropertiesConsumer.java | 25 ++++
.../cfg/domainbinding/TypeNameProvider.java | 28 ++++
.../gorm/specs/HibernateGormDatastoreSpec.groovy | 7 +-
.../hibernate/cfg/GrailsDomainBinderSpec.groovy | 3 +-
.../cfg/domainbinding/ClassBinderSpec.groovy | 6 +-
.../cfg/domainbinding/TypeNameProviderSpec.groovy | 79 ++++++++++++
.../data/testing/tck/tests/AttachMethodSpec.groovy | 2 +-
.../testing/tck/tests/CircularOneToManySpec.groovy | 2 +-
.../tck/tests/CommonTypesPersistenceSpec.groovy | 2 +-
11 files changed, 201 insertions(+), 96 deletions(-)
diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
index 3dd3a4ba68..264fe90497 100644
--- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
+++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
@@ -47,7 +47,7 @@ public abstract class AbstractGrailsDomainBinder {
* @param theClass The domain class in question
* @return A Mapping object or null
*/
- static void cacheMapping(Class<?> theClass, Mapping mapping) {
+ public static void cacheMapping(Class<?> theClass, Mapping mapping) {
MAPPING_CACHE.put(theClass, mapping);
}
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 4e57e4739b..14084c1902 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
@@ -35,6 +35,8 @@ import org.grails.datastore.mapping.reflect.EntityReflector;
import org.grails.datastore.mapping.reflect.NameUtils;
import org.grails.orm.hibernate.access.TraitPropertyAccessStrategy;
import org.grails.orm.hibernate.cfg.domainbinding.ClassBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesConsumer;
+import org.grails.orm.hibernate.cfg.domainbinding.TypeNameProvider;
import org.hibernate.FetchMode;
import org.hibernate.MappingException;
import org.hibernate.boot.internal.MetadataBuildingContextRootImpl;
@@ -105,11 +107,13 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;
import java.util.StringTokenizer;
+import static java.util.Optional.ofNullable;
import static org.hibernate.boot.model.naming.Identifier.toIdentifier;
;
@@ -307,7 +311,9 @@ public class GrailsDomainBinder implements MetadataContributor {
SimpleValue elt = new BasicValue(metadataBuildingContext, map.getCollectionTable());
map.setElement(elt);
- String typeName = getTypeName(property,getPropertyConfig(property), getMapping(property.getOwner()));
+ PropertyConfig config = getPropertyConfig(property);
+ Mapping mapping = getMapping(property.getOwner());
+ String typeName = new TypeNameProvider().getTypeName(property, mapping);
if (typeName == null ) {
if(property instanceof Basic) {
@@ -763,7 +769,8 @@ public class GrailsDomainBinder implements MetadataContributor {
}
else {
- String typeName = getTypeName(property, config, getMapping(property.getOwner()));
+ Mapping mapping = getMapping(property.getOwner());
+ String typeName = new TypeNameProvider().getTypeName(property, mapping);
if (typeName == null) {
Type type = mappings.getTypeConfiguration().getBasicTypeRegistry().getRegisteredType(className);
if (type != null) {
@@ -819,22 +826,6 @@ public class GrailsDomainBinder implements MetadataContributor {
return element.getColumns().iterator().next();
}
- private String getTypeName(PersistentProperty property, PropertyConfig config, Mapping mapping) {
- if (config != null && config.getType() != null) {
- final Object typeObj = config.getType();
- if (typeObj instanceof Class<?>) {
- return ((Class<?>)typeObj).getName();
- }
- return typeObj.toString();
- }
-
- if (mapping != null) {
- return mapping.getTypeName(property.getType());
- }
-
- return null;
- }
-
private void bindColumnConfigToColumn(PersistentProperty property, Column column, ColumnConfig columnConfig) {
final PropertyConfig mappedForm = property != null ? (PropertyConfig) property.getMapping().getMappedForm() : null;
boolean allowUnique = mappedForm != null && !mappedForm.isUniqueWithinGroup();
@@ -1324,7 +1315,7 @@ public class GrailsDomainBinder implements MetadataContributor {
}
}
- private void evaluateMapping(PersistentEntity domainClass) {
+ public void evaluateMapping(PersistentEntity domainClass) {
try {
final Mapping m = (Mapping) domainClass.getMapping().getMappedForm();
trackCustomCascadingSaves(m, domainClass.getPersistentProperties());
@@ -1376,7 +1367,7 @@ public class GrailsDomainBinder implements MetadataContributor {
* @return A Mapping object or null
*/
private static Mapping getMapping(Class<?> theClass) {
- return AbstractGrailsDomainBinder.getMapping(theClass);
+ return Optional.ofNullable(AbstractGrailsDomainBinder.getMapping(theClass)).orElseThrow();
}
/**
@@ -1534,10 +1525,8 @@ public class GrailsDomainBinder implements MetadataContributor {
DiscriminatorConfig discriminatorConfig = subMapping != null ? subMapping.getDiscriminator() : null;
subClass.setDiscriminatorValue(discriminatorConfig != null && discriminatorConfig.getValue() != null ? discriminatorConfig.getValue() : fullName);
+ configureDerivedProperties(sub, subMapping);
- if (subMapping != null) {
- configureDerivedProperties(sub, subMapping);
- }
}
Integer bs = (m == null) ? null : m.getBatchSize();
if (bs != null) {
@@ -1743,12 +1732,7 @@ public class GrailsDomainBinder implements MetadataContributor {
}
private void configureDerivedProperties(PersistentEntity domainClass, Mapping m) {
- for (PersistentProperty prop : domainClass.getPersistentProperties()) {
- PropertyConfig propertyConfig = m.getPropertyConfig(prop.getName());
- if (propertyConfig != null && propertyConfig.getFormula() != null) {
- propertyConfig.setDerived(true);
- }
- }
+ domainClass.getPersistentProperties().forEach(new ConfigureDerivedPropertiesConsumer( m));
}
/*
@@ -1758,71 +1742,48 @@ public class GrailsDomainBinder implements MetadataContributor {
RootClass root, InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
// get the schema and catalog names from the configuration
- Mapping m = getMapping(domainClass.getJavaClass());
+ Mapping m = ofNullable(getMapping(domainClass.getJavaClass())).orElseThrow();
- String schema = getSchemaName(mappings);
- String catalog = getCatalogName(mappings);
-
- if (m != null) {
- configureDerivedProperties(domainClass, m);
- CacheConfig cc = m.getCache();
- if (cc != null && cc.getEnabled()) {
- root.setCacheConcurrencyStrategy(cc.getUsage());
- root.setCached(true);
- if ("read-only".equals(cc.getUsage())) {
- root.setMutable(false);
- }
- root.setLazyPropertiesCacheable(!"non-lazy".equals(cc.getInclude()));
+ configureDerivedProperties(domainClass, m);
+ CacheConfig cc = m.getCache();
+ if (cc != null && cc.getEnabled()) {
+ root.setCacheConcurrencyStrategy(cc.getUsage());
+ root.setCached(true);
+ if ("read-only".equals(cc.getUsage())) {
+ root.setMutable(false);
}
+ root.setLazyPropertiesCacheable(!"non-lazy".equals(cc.getInclude()));
+ }
+ root.setBatchSize(ofNullable(m.getBatchSize()).orElse(0));
+ root.setDynamicUpdate(m.getDynamicUpdate());
+ root.setDynamicInsert(m.getDynamicInsert());
- Integer bs = m.getBatchSize();
- if (bs != null) {
- root.setBatchSize(bs);
- }
- if (m.getDynamicUpdate()) {
- root.setDynamicUpdate(true);
- }
- if (m.getDynamicInsert()) {
- root.setDynamicInsert(true);
- }
- }
+ var schema = ofNullable(m.getTable())
+ .map(org.grails.orm.hibernate.cfg.Table::getSchema)
+ .orElse(getSchemaName(mappings));
- final boolean hasTableDefinition = m != null && m.getTable() != null;
- if (hasTableDefinition && m.getTable().getSchema() != null) {
- schema = m.getTable().getSchema();
- }
- if (hasTableDefinition && m.getTable().getCatalog() != null) {
- catalog = m.getTable().getCatalog();
- }
+ var catalog = ofNullable(m.getTable())
+ .map(org.grails.orm.hibernate.cfg.Table::getCatalog)
+ .orElse( getCatalogName(mappings));
- final boolean isAbstract = m != null && !m.getTablePerHierarchy() && m.isTablePerConcreteClass() && root.isAbstract();
+
+ var isAbstract = !m.getTablePerHierarchy() && m.isTablePerConcreteClass() && root.isAbstract();
// create the table
- Table table = mappings.addTable(schema, catalog,
- getTableName(domainClass, sessionFactoryBeanName),
- null, isAbstract, metadataBuildingContext);
+ Table table = mappings.addTable(schema
+ , catalog
+ , getTableName(domainClass, sessionFactoryBeanName)
+ , null
+ , isAbstract
+ , metadataBuildingContext
+ );
root.setTable(table);
-
if (LOG.isDebugEnabled()) {
LOG.debug("[GrailsDomainBinder] Mapping Grails domain class: " + domainClass.getName() + " -> " + root.getTable().getName());
}
-
bindIdentity(domainClass, root, mappings, m, sessionFactoryBeanName);
-
- if (m == null) {
- bindVersion(domainClass.getVersion(), root, mappings, sessionFactoryBeanName);
- }
- else {
- if (m.getVersioned()) {
- bindVersion(domainClass.getVersion(), root, mappings, sessionFactoryBeanName);
- }
- else {
- root.setOptimisticLockStyle(OptimisticLockStyle.NONE);
- }
- }
-
+ bindVersion(domainClass.getVersion(), root, mappings, sessionFactoryBeanName);
root.createPrimaryKey();
-
createClassProperties(domainClass, root, mappings, sessionFactoryBeanName);
}
@@ -1941,7 +1902,8 @@ public class GrailsDomainBinder implements MetadataContributor {
bindSimpleValue(currentGrailsProp, null, (SimpleValue) value, EMPTY_PATH, mappings, sessionFactoryBeanName);
}
else if (collectionType != null) {
- String typeName = getTypeName(currentGrailsProp, getPropertyConfig(currentGrailsProp),gormMapping);
+ PropertyConfig config = getPropertyConfig(currentGrailsProp);
+ String typeName = new TypeNameProvider().getTypeName(currentGrailsProp, gormMapping);
if ("serializable".equals(typeName)) {
value = new BasicValue(metadataBuildingContext, table);
bindSimpleValue(typeName, (SimpleValue) value, currentGrailsProp.isNullable(),
@@ -2126,7 +2088,9 @@ public class GrailsDomainBinder implements MetadataContributor {
PropertyConfig pc = getPropertyConfig(property);
final PersistentEntity owner = property.getOwner();
- String typeName = getTypeName(property, getPropertyConfig(property), getMapping(owner));
+ PropertyConfig config = getPropertyConfig(property);
+ Mapping mapping1 = getMapping(owner);
+ String typeName = new TypeNameProvider().getTypeName(property, mapping1);
if (typeName == null) {
Properties enumProperties = new Properties();
enumProperties.put(ENUM_CLASS_PROP, propertyType.getName());
@@ -2952,7 +2916,8 @@ public class GrailsDomainBinder implements MetadataContributor {
}
private void setTypeForPropertyConfig(PersistentProperty grailsProp, SimpleValue simpleValue, PropertyConfig config) {
- final String typeName = getTypeName(grailsProp, getPropertyConfig(grailsProp), getMapping(grailsProp.getOwner()));
+ Mapping mapping = getMapping(grailsProp.getOwner());
+ final String typeName = new TypeNameProvider().getTypeName(grailsProp, mapping);
if (typeName == null) {
simpleValue.setTypeName(grailsProp.getType().getName());
}
@@ -3238,7 +3203,9 @@ public class GrailsDomainBinder implements MetadataContributor {
private String getIndexColumnType(PersistentProperty property, String defaultType) {
PropertyConfig pc = getPropertyConfig(property);
if (pc != null && pc.getIndexColumn() != null && pc.getIndexColumn().getType() != null) {
- return getTypeName(property, pc.getIndexColumn(), getMapping(property.getOwner()));
+ PropertyConfig config = pc.getIndexColumn();
+ Mapping mapping = getMapping(property.getOwner());
+ return new TypeNameProvider().getTypeName(property, mapping);
}
return defaultType;
}
@@ -3603,7 +3570,9 @@ public class GrailsDomainBinder implements MetadataContributor {
}
public String getTypeName(ToMany property) {
- return binder.getTypeName(property, binder.getPropertyConfig(property), getMapping(property.getOwner()));
+ PropertyConfig config = binder.getPropertyConfig(property);
+ Mapping mapping = getMapping(property.getOwner());
+ return new TypeNameProvider().getTypeName(property, mapping);
}
}
diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java
new file mode 100644
index 0000000000..1400c6d223
--- /dev/null
+++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java
@@ -0,0 +1,25 @@
+package org.grails.orm.hibernate.cfg.domainbinding;
+
+import org.grails.datastore.mapping.model.PersistentProperty;
+import org.grails.orm.hibernate.cfg.Mapping;
+
+import java.util.Objects;
+import java.util.function.Consumer;
+import static java.util.Optional.ofNullable;
+
+
+public class ConfigureDerivedPropertiesConsumer implements Consumer<PersistentProperty> {
+
+ private final Mapping m;
+
+ public ConfigureDerivedPropertiesConsumer(Mapping m) {
+ this.m = m;
+ }
+ @Override
+ public void accept(PersistentProperty persistentProperty) {
+ ofNullable(m.getPropertyConfig(persistentProperty.getName()))
+ .ifPresent(propertyConfig ->
+ propertyConfig.setDerived(Objects.nonNull(propertyConfig.getFormula()))
+ );
+ }
+}
diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java
new file mode 100644
index 0000000000..6aa05e5dfd
--- /dev/null
+++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java
@@ -0,0 +1,28 @@
+package org.grails.orm.hibernate.cfg.domainbinding;
+
+import jakarta.validation.constraints.NotNull;
+import org.grails.datastore.mapping.model.PersistentProperty;
+import org.grails.orm.hibernate.cfg.Mapping;
+import org.grails.orm.hibernate.cfg.PropertyConfig;
+
+import static java.util.Optional.ofNullable;
+
+public class TypeNameProvider {
+
+ public String getTypeName(@NotNull PersistentProperty property
+ ,@NotNull Mapping mapping) {
+ return ofNullable(getPropertyConfig(property))
+ .map(PropertyConfig::getType)
+ .map(typeObj -> typeObj instanceof Class<?> clazz ?
+ clazz.getName() : typeObj.toString()
+ )
+ .orElse(mapping.getTypeName(property.getType()));
+ }
+
+ private PropertyConfig getPropertyConfig(PersistentProperty property) {
+ return (PropertyConfig) property.getMapping().getMappedForm();
+ }
+}
+
+
+
diff --git a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
index 11b5c31bb1..cb0697bf1f 100644
--- a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
+++ b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
@@ -40,7 +40,8 @@ class HibernateGormDatastoreSpec extends GrailsDataTckSpec<GrailsDataHibernate6T
]
}
- HibernatePersistentEntity createPersistentEntity(String className
+ HibernatePersistentEntity createPersistentEntity(GrailsDomainBinder binder
+ , String className
, Map<String, Class> fieldProperties
, Map<String, String> staticMapping
@@ -62,7 +63,9 @@ class HibernateGormDatastoreSpec extends GrailsDataTckSpec<GrailsDataHibernate6T
"""
def clazz = classLoader.parseClass(classText)
- getMappingContext().addPersistentEntity(clazz) as HibernatePersistentEntity
+ def entity = getMappingContext().addPersistentEntity(clazz) as HibernatePersistentEntity
+ binder.evaluateMapping(entity)
+ entity
}
protected InFlightMetadataCollectorImpl getCollector() {
diff --git a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
index eb3b349bb6..0c07c13bed 100644
--- a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
+++ b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
@@ -12,7 +12,8 @@ class GrailsDomainBinderSpec extends HibernateGormDatastoreSpec {
def grailsDomainBinder = getGrailsDomainBinder()
def simpleName = "Book"
def fieldProperties = [title: String]
- def persistentEntity = createPersistentEntity(simpleName, fieldProperties, [:])
+ def persistentEntity = createPersistentEntity(grailsDomainBinder,simpleName, fieldProperties, [:])
+
grailsDomainBinder.bindRoot(persistentEntity, collector,"sessionFactoryName")
println("when")
then:
diff --git a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
index 478a048d13..04ab545c60 100644
--- a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
+++ b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
@@ -14,7 +14,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
def simpleName = "Book"
def persistentName = "foo.Book"
- def persistentEntity = createPersistentEntity(simpleName, [:], [:])
+ def persistentEntity = createPersistentEntity(grailsDomainBinder,simpleName, [:], [:])
def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
def binder = new ClassBinder()
@@ -39,7 +39,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
def simpleName = "Book"
def persistentName = "foo.Book"
- def persistentEntity = createPersistentEntity(simpleName, [:], [autoImport: "true"])
+ def persistentEntity = createPersistentEntity(grailsDomainBinder,simpleName, [:], [autoImport: "true"])
def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
def binder = new ClassBinder()
@@ -64,7 +64,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
def simpleName = "Book"
def persistentName = "foo.Book"
- def persistentEntity = createPersistentEntity(simpleName, [:], [autoImport: "false"])
+ def persistentEntity = createPersistentEntity(grailsDomainBinder, simpleName, [:], [autoImport: "false"])
def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
def binder = new ClassBinder()
diff --git a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy
new file mode 100644
index 0000000000..14d276440c
--- /dev/null
+++ b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy
@@ -0,0 +1,79 @@
+package org.grails.orm.hibernate.cfg.domainbinding
+
+import grails.gorm.specs.HibernateGormDatastoreSpec
+import grails.persistence.Entity
+import org.grails.orm.hibernate.cfg.HibernatePersistentEntity
+import org.grails.orm.hibernate.cfg.Mapping
+import org.hibernate.type.descriptor.java.BasicJavaType
+import org.hibernate.type.descriptor.jdbc.JdbcType
+import org.hibernate.usertype.BaseUserTypeSupport
+
+import java.util.function.BiConsumer
+
+class TypeNameProviderSpec extends HibernateGormDatastoreSpec {
+
+ void "Test - type not a class"() {
+ when:
+ def grailsDomainBinder = getGrailsDomainBinder()
+ def simpleName = "Book"
+ def fieldProperties = ["name": String]
+ def mappingProperties = ["name": "type: 'text'"]
+ def persistentEntity = createPersistentEntity(grailsDomainBinder, simpleName, fieldProperties, mappingProperties)
+ def property = persistentEntity.getPersistentProperties()[0]
+ Mapping mapping = new Mapping()
+ mapping.setUserTypes(["foo.Bar": persistentEntity.getJavaClass()])
+ def name = new TypeNameProvider().getTypeName(property, mapping)
+
+ then:
+ name == "text"
+
+ }
+
+ void "Test - type is a class"() {
+ when:
+ def grailsDomainBinder = getGrailsDomainBinder()
+ def simpleName = "Book"
+ def fieldProperties = ["name": String]
+ def mappingProperties = ["name": "type: String"]
+ def persistentEntity = createPersistentEntity(grailsDomainBinder, simpleName, fieldProperties, mappingProperties)
+ def property = persistentEntity.getPersistentProperties()[0]
+ Mapping mapping = new Mapping()
+ def name = new TypeNameProvider().getTypeName(property, mapping)
+
+ then:
+ name == "java.lang.String"
+
+ }
+
+ void "Test - type not included but in general mapping"() {
+ when:
+ def grailsDomainBinder = getGrailsDomainBinder()
+ def persistentEntity = getMappingContext().addPersistentEntity(Employee) as HibernatePersistentEntity
+ grailsDomainBinder.evaluateMapping(persistentEntity)
+ def property = persistentEntity.getPersistentProperties()[0]
+ Mapping mapping = new Mapping()
+ mapping.setUserTypes([(Salary): SalaryType])
+ def name = new TypeNameProvider().getTypeName(property, mapping)
+
+ then:
+ name == SalaryType.name
+
+ }
+
+}
+
+class Salary {
+ BigDecimal amount
+}
+
+class SalaryType extends BaseUserTypeSupport<Salary> {
+ @Override
+ protected void resolve(BiConsumer<BasicJavaType<Salary>, JdbcType> resolutionConsumer) {
+ }
+}
+@Entity
+class Employee {
+ Salary salary
+}
+
+
diff --git a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
index 0530fc6537..742d65b802 100644
--- a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
+++ b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
@@ -26,7 +26,7 @@ import org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
*/
class AttachMethodSpec extends GrailsDataTckSpec {
void setupSpec() {
- manager.domainClasses.add(Person)
+ manager.addAllDomainClasses([Person])
}
void "Test attach method"() {
diff --git a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
index fac928f18b..953e783ef3 100644
--- a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
+++ b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
@@ -27,7 +27,7 @@ import org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
class CircularOneToManySpec extends GrailsDataTckSpec {
void setupSpec() {
- manager.domainClasses.add(Task)
+ manager.addAllDomainClasses([Task])
}
void "Test circular one-to-many"() {
diff --git a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
index 34dcf1f08b..dd8e15cbbc 100644
--- a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
+++ b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
@@ -26,7 +26,7 @@ import org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
*/
class CommonTypesPersistenceSpec extends GrailsDataTckSpec {
void setupSpec() {
- manager.domainClasses.add(CommonTypes)
+ manager.addAllDomainClasses([CommonTypes])
}
def testPersistBasicTypes() {