在grails/hibernate中使用uuid或guid作为id

use*_*163 5 grails groovy hibernate hibernate-mapping

我需要将GUID/UUID作为行的id列.

这是为了能够在线和离线创建条目,当然在合并时不会在PK上产生这些冲突.我知道我可以缓解这一点,但我想保持简单,并且已经有使用uuid/guids来定义关系的遗留应用程序.数据也需要稍后同步.重写现有应用程序不是一种选择.

当我尝试使用GUID或UUID与grails时,我得到一个错误500.(在h2上使用GUID导致另一个错误 - 拒绝该数据库不支持GUID,如预期的那样).

我尝试保存'WithUUID'时收到此错误:

URI    /gtestUUID/withUUID/save
Class    java.lang.IllegalArgumentException
Message    argument type mismatch
Run Code Online (Sandbox Code Playgroud)

完整错误500:http: //imgur.com/m2Udbm6.png

我试过使用mariadb 5.5和1.1.7驱动程序,这导致了同样的问题.

Grails 2.3.8.Windows 8.1(x64).Netbeans 7.4

全部默认.

示例类:

WithUUID.groovy:

package gtestuuid

class WithUUID {
    String name
    static constraints = {
    }
    static mapping = {
        id generator: 'uuid'
    }
}
Run Code Online (Sandbox Code Playgroud)

WithUUIDController.groovy:

package gtestuuid

class WithUUIDController {
    def scaffold = WithUUID
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

链接到相关的grails文档

(由于我的低代表,我无法发布更多文档/帖子的链接)

dim*_*l90 10

或者,您可以在类中指定UUID id字段,而无需像本例中那样进行任何初始化和设置映射

class Buyer {

    UUID id
    String name
    String phone
    String email

    static constraints = {
    }

    static mapping = {
        id generator : 'uuid2', type: 'pg-uuid' // pg-uuid because I use postgresql
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以在Config.groovy中取出映射

grails.gorm.default.mapping = {
    id generator : 'uuid2', type: 'pg-uuid'
}
Run Code Online (Sandbox Code Playgroud)

并且您的类将仅包含UUID id字段,而不包含任何redudant代码


Abi*_*pto 9

您需要将id设置为String或UUID(或您需要的任何内容).

下面是我的班级用户的另一种可能性的例子:

import java.util.UUID

class User {

    String id = UUID.randomUUID().toString()

    static mapping = {
        id generator:'assigned'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果表中已经存在`id`会发生什么? (2认同)