一尘不染

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

hibernate

我需要将GUID / UUID作为行的ID列。

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

当我尝试在grails上使用GUID或UUID时,出现错误500。(在h2上使用GUID会导致另一个错误-如预期的那样,数据库不支持GUID)。

当我尝试保存“ WithUUID”时出现此错误:

URI    /gtestUUID/withUUID/save
Class    java.lang.IllegalArgumentException
Message    argument type mismatch

整个错误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'
    }
}

WithUUIDController.groovy:

package gtestuuid

class WithUUIDController {
    def scaffold = WithUUID
}

任何帮助将不胜感激。

链接到相关的grails文档

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


阅读 378

收藏
2020-06-20

共1个答案

一尘不染

您需要将id设置为String或UUID(或任何您需要的值)。

下面是我的类User的另一种可能的示例:

import java.util.UUID

class User {

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

    static mapping = {
        id generator:'assigned'
    }
}
2020-06-20