我正在开展一个小型私人项目,我正在努力将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。
简而言之:看起来实例有时为null或至少处于(未保存)状态。我不 了解show方法中的bcause应该以干净的状态接收实例。
ps:db中的条目由bootsrap插入。
希望得到一些支持。答案 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
}
}
告诉我它是否有效。