GORM独立环境下如何正确应用application.groovy中的默认映射?
GORM独立环境应用全局默认映射的正确方式
在GORM独立模式(不依赖完整Grails框架)下,application.groovy不会被自动加载,所以你之前的配置无法生效,以下是两种可行的解决方案:
方案一:手动加载配置并传入初始化参数
你可以将全局默认映射配置写入配置文件,或直接在代码中构造配置,确保初始化HibernateDatastore时使用的config对象包含该配置:
方式1:通过application.yml配置
在src/main/resources/application.yml中添加:
gorm: default: mapping: id: column: o_id version: column: chng_id lastUpdated: column: upd
保持你原有的初始化代码即可,YamlSlurper会自动加载该配置到config对象中。
方式2:代码中硬编码配置
如果不想用配置文件,可直接在初始化前给config对象添加映射配置:
Map config = new YamlSlurper().parse(getClass().getResourceAsStream('/application.yml')) // 手动添加全局默认映射 config.gorm.default.mapping = [ id: [column: 'o_id'], version: [column: 'chng_id'], lastUpdated: [column: 'upd'] ] new HibernateDatastore(config.gorm, classes as Class[])
方案二:自定义MappingContextCustomizer
通过实现MappingContextCustomizer接口,全局修改实体的映射规则,适合复杂的自定义需求:
- 实现自定义映射定制器:
import org.grails.datastore.mapping.core.AbstractMappingListener import org.grails.datastore.mapping.core.MappingContext import org.grails.datastore.mapping.core.PersistentEntity import org.grails.datastore.mapping.model.MappingContextCustomizer class GlobalMappingCustomizer implements MappingContextCustomizer { @Override void customize(MappingContext mappingContext) { mappingContext.addMappingListener(new AbstractMappingListener() { @Override void afterMappedEntity(MappingContext mappingContext, PersistentEntity entity) { // 设置ID列名 entity.identity.mapping.mappedForm.columnName = 'o_id' // 设置版本列名 def versionProp = entity.getVersion() if (versionProp) { versionProp.mapping.mappedForm.columnName = 'chng_id' } // 设置lastUpdated列名 def lastUpdatedProp = entity.getPropertyByName('lastUpdated') if (lastUpdatedProp) { lastUpdatedProp.mapping.mappedForm.columnName = 'upd' } } }) } }
- 在初始化HibernateDatastore时注册该定制器:
Map config = new YamlSlurper().parse(getClass().getResourceAsStream('/application.yml')) // 初始化时传入定制器 new HibernateDatastore( config.gorm, [new GlobalMappingCustomizer()] as MappingContextCustomizer[], classes as Class[] )
内容的提问来源于stack exchange,提问作者injecteer
相关产品推荐
相关产品推荐

