gpt4 book ai didi

带有自定义 id 字段的 Grails 2 GORM 在显示操作中提示 "Provided id of the wrong type for class"

转载 作者:行者123 更新时间:2023-12-02 15:35:21 25 4
gpt4 key购买 nike

我正在使用 Grails 2 在带有自定义 id 字段的旧数据库上提供接口(interface)。

我有一个域类,如下所示:

class StorageFile {

static mapping = {
table 'storage_file'
// version is set to false, because this column isn't normally present in legacy databases
version false

id generator:'identity', name:'fileId', column:'file_id'
objectIdStorageObject column:'object_id'
}

Integer fileId
StorageObject objectIdStorageObject

static constraints = {
fileId(max: 2147483647)
objectIdStorageObject()
}

String toString() {
return "${fileId}"
}

我用脚手架生成了 Controller 和 View 。由于以下项目,生成的 View 中的链接不起作用:
<td><g:link action="show" id="${storageFileInstance.id}">${fieldValue(bean: storageFileInstance, field: "fileId")}</g:link></td>
虽然我可以通过替换 id=${storageFileInstance.id} 来解决这个问题与 id=${storageFileInstance.fileId} .

然后出现了另一个问题,即使我只是手动转到
像/TestTmm/StorageFile/show/362 这样的网址。 Grails 会产生如下错误:
Error 500: Internal Server Error
URI /TestTmm/storageFile/show/362
Class org.hibernate.TypeMismatchException
Message Provided id of the wrong type for class tmmweb.StorageFile.
Expected: class java.lang.Integer, got class java.lang.Long`

提供给 Controller 的 params.id 本身显示以下操作:
def show() {
def storageFileInstance = StorageFile.get(params.id)

是一个字符串,我可以通过 println "${params.id.getClass()} 进行检查,但不知何故,这在 Hibernate 中以 Long 而不是 Integer 的形式结束。很不清楚为什么?

id 字段名为“id”的类似类没有这个问题。
class Role {

static mapping = {
table 'role'
version false

usersList column:'rid',joinTable:'users_roles'
id generator:'identity', column:'rid'
}

Integer id
String name

static hasMany = [ usersList : User ]
static belongsTo = [User]

static constraints = {
id(max: 2147483647)
name(size: 1..64, blank: false)
usersList()
}

String toString() {
return "${name}"
}

}

关于如何解决正在发生的休眠映射问题的任何想法?

最佳答案

我认为您不应该将 id 的名称定义为“id”以外的任何内容。如果你真的想用另一个名字访问它,你可以为 id 属性添加一个别名。

class StorageFile {
static mapping = {
table 'storage_file'
// version is set to false, because this column isn't normally present in legacy databases
version false

id generator:'identity', column:'file_id'
objectIdStorageObject column:'object_id'
}

Integer id
StorageObject objectIdStorageObject

// if you want to add an alias for "id"
static transients = ['fileId']

public Integer getFileId() { id }

关于带有自定义 id 字段的 Grails 2 GORM 在显示操作中提示 "Provided id of the wrong type for class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12240743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com