Grails,UUID,Postgresql,生成视图

时间:2014-05-05 12:19:32

标签: java postgresql grails uuid

我正在开展一个小型私人项目,我正在努力将pk改为uuid。 首先我使用的软件: Grails 2.3.7 java 1.7.0_45 postgresql 9.1 想法13.0.2

这是我到目前为止所做的: 我创建了一个Domain" TourCategory"带有2个String字段和一个应该成为的字符串UUID pk。

class TourCategory {
    String uuid
    String label
    String description

    static mapping = {
        id generator: 'assigned', name: 'uuid', type: 'pg-uuid'
    }

    def beforeValidate() {
        uuid = uuid == null ? UUID.randomUUID().toString() : uuid;
    }

    static constraints = {
    }
}

然后我生成了控制器和所有视图,但这并不是开箱即用的。 列表页面很好,但是show,edit不起作用,因为grails正在尝试创建 一个新的TourCategory而不是更新/编辑。所以我改变了视图中的调用 id到uuid,然后至少它找到正确的tourcategoryentry并显示它。如果我试着 保存实例它总是会抛出错误:

| Error 2014-05-05 14:07:55,053 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver  - CannotRedirectException occurred when processing request: [PUT] /ProSen1234/tourCategory/update/e0ffda44-4b72-4fca-a0e6-26a2c1b03d6d - parameters:
description: irgendeinbeschreib33
_action_update: Update
label: Schneeschuhlaufen
uuid: e0ffda44-4b72-4fca-a0e6-26a2c1b03d6d
_method: PUT
version: 0
Cannot redirect for object [org.prosen.TourCategory : (unsaved)] it is not a domain or has no identifier. Use an explicit redirect instead . Stacktrace follows:
Message: Cannot redirect for object [org.prosen.TourCategory : (unsaved)] it is not a domain or has no identifier. Use an explicit redirect instead 
    Line | Method

我在每个方法的开头放了一个println,看起来像是parameterInstance 总是(未保存)。我不明白,因为它似乎没问题并保存更改 到db。

简而言之:

  1. 我想在简单的域类中使用uuids
  2. 我生成了控制器和所有视图
  3. 我在所有视图中将id更改为uuid
  4. 看起来实例有时为null或至少处于(未保存)状态。我不 了解show方法中的bcause应该以干净的状态接收实例。

    ps:db中的条目由bootsrap插入。

    希望得到一些支持。

1 个答案:

答案 0 :(得分:0)

你可以用这个改变你的域名:

import java.util.UUID

class TourCategory {

    String uuid = UUID.randomUUID().toString()
    String label
    String description

    static mapping = {
        id generator: 'assigned', name: 'uuid'
    }

    static constraints = {
        uuid unique:true, maxSize: 36
    }
}

告诉我它是否有效。