1

我正在开发一个 Grails 应用程序,我需要与现有数据库 (Oracle) 集成,该数据库使用 GUID 作为某些表上的主键。Grails 可以使用以下方法轻松处理此问题:

static mapping = {
    id generator: 'guid'
}

当我尝试使用内存数据库编写一些集成测试时,我的问题就出现了。是否有支持 GUID 主键列的内存数据库?如果没有,有没有办法在测试期间切换生成器值?

到目前为止,我已经测试了 Grails 提供的默认 H2 数据库,但没有成功。

4

2 回答 2

4

看起来 Hibernate 的 GUID 支持实际上只是为了包装 Oracle 的实现,因此它不是可移植的,并且不适用于 H2。但它很简单,可以在任何地方使用您自己的。实现org.hibernate.id.IdentifierGenerator接口,例如

package com.mycompany.myapp

import org.hibernate.engine.SessionImplementor
import org.hibernate.id.IdentifierGenerator

class UuidIdentifierGenerator implements IdentifierGenerator {

   Serializable generate(SessionImplementor session, object) {
      UUID.randomUUID().toString()
   }
}

并将生成器属性更改为您的实现的完整类名:

class MyDomainClass {
   String id
   // other fields

   static mapping = {
      id generator: 'com.mycompany.myapp.UuidIdentifierGenerator'
   }
}
于 2013-07-30T22:40:16.123 回答
0

我以这种方式使用 Hibernate hbm 映射:

<id  name="id" column="id" >
    <generator class="guid"></generator>
</id>
于 2013-07-30T21:29:28.263 回答