【问题标题】:Issues with UUID with Grails, GORM and MongoDBGrails、GORM 和 MongoDB 的 UUID 问题
【发布时间】:2013-02-07 06:56:47
【问题描述】:

我是 Grails 的新手,我尝试使用 UUID 类型的 id 持久化模型。我知道有 ObjectId,但现在我会坚持 UUID。

class Book {
  UUID id
  String title
}

我有一个启用脚手架的 BookController。当我现在加载控制器并尝试添加新书时,我从 Grails 收到以下错误消息:

错误 500:内部服务器错误 URI /GrailsTest/book/save 类 org.springframework.core.convert.ConverterNotFoundException 消息找不到能够从 java.lang.String 类型转换为 java.util.UUID 类型的转换器 grails-app/controllers/ch/teamrg/test/BookController.groovy 的第 24 行左右 PageFragmentCachingFilter.java 的第 186 行附近 183:如果(方法==空){ 184: log.debug("No cacheable method found for {}:{} {}", 185: 新对象 [] { request.getMethod(), request.getRequestURI(), getContext() }); 186:链.doFilter(请求,响应); 187:返回; 188:} 189:集合cacheOperations = cacheOperationSource.getCacheOperations( AbstractFilter.java 的第 63 行附近 60:试试{ 61: // 为 RequestDispatcher 转发设置 NO_FILTER 以避免双重 gzip 62: if (filterNotDisabled(request)) { 63:doFilter(请求,响应,链); 64:} 65:否则{ 66: 链.doFilter(req, res); 痕迹 线 |方法 ->> 18 |在 org.grails.datastore.mapping.model.types.conversion.DefaultConversionService 中转换 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 365 | org.grails.datastore.mapping.engine.NativeEntryEntityPersister 中的 cacheNativeEntry | 725 |持久实体。在 '' | 125 |坚持在 org.grails.datastore.mapping.engine.EntityPersister |第479章坚持。 . . .在 org.grails.datastore.mapping.core.AbstractSession | 166 | doSave 在 org.grails.datastore.gorm.GormInstanceApi | 143 |呼叫。 . . . .在 org.grails.datastore.gorm.GormInstanceApi$_save_closure4 | 301 |在 org.grails.datastore.mapping.core.DatastoreUtils 中执行 | 34 |执行 。 . . .在 org.grails.datastore.gorm.AbstractDatastoreApi | 142 |保存在 org.grails.datastore.gorm.GormInstanceApi | 258 |称呼 。 . . . . .在 org.grails.datastore.gorm.InstanceMethodInvokingClosure | 24 |保存在 BookController.groovy | 186 |过滤器。 . . .在 PageFragmentCachingFilter.java | 63 | AbstractFilter.java 中的 doFilter |第886章运行任务。 . . .在 java.util.concurrent.ThreadPoolExecutor$Worker | 908 |跑进 '' ^ 680 |跑步 。 . . . . .在 java.lang.Thread

我在 org.grails.datastore.mapping.engine.NativeEntryEntityPersister 设置了一个断点。当应用程序到达那里时,我可以解析返回 org.grails.datastore.mapping.model.types.conversion.DefaultConversionService 实例的 getMappingContext().getConversionService() 部分。此实例配置了 10 个转换器,包括 ObjectId 和 Binary 的转换器。我现在问自己,我可以在哪里配置我自己的转换器,以便我可以在 String 和 UUID 之间进行转换?

因为我是 Grails 的新手,所以我不知道将所需的 Java 文件放在哪里,以及我必须在哪个文件中放置什么样的配置。如果有人能指出我正确的方向会很酷。

【问题讨论】:

    标签: mongodb grails grails-orm


    【解决方案1】:

    custom user types 的文档中有一个会话。

    因此,您需要创建扩展 AbstractMappingAwareCustomTypeMarshaller 的类型类并注册为 Spring Bean(参见文档的最后部分)。

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多