gpt4 book ai didi

Grails 运行时异常 - 列“PHOTO BINARY(255) 的值太长”

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

在将 jpeg 文件(3 到 8 KB 之间)加载到定义为 byte[] 的列中时,我得到了标题异常,使用 Grails 2.2.3 - 这是错误:
org.h2.jdbc.JdbcSQLException: Value too long for column "PHOTO BINARY(255) ... SQL statement: update profile set col1=?, ..., photo=?, ..., coln=? where id=?
这在 Grails 1.3.7 中工作,使用 org.hsqldb.jdbcDriver,但现在总是失败。我应该以不同的方式定义变量吗?如果是这样呢?

我尝试更改所有 byte[] photo代码到 byte[] photo = new byte[10000] ,但这根本没有帮助。

我正在添加原始问题以回应我得到的答案。首先谢谢大家。这是 DataSource.groovy 中的相关代码:

environment {
developement {
dataSource {
dbCreate = "update"
url = "jdbc:h2:file:devDb:MVCC=TRUE;LOCK_TIMEOUT=10000
}
}
}

以下文件和代码是我认为从 ImageController.groovy 加载图像的位置:
class PhotoUploadCommand {
byte[] photo
//def photo // tried, makes no diff here
String userId
static constraints = { photo(maxSize: 1024 * 1024) } // added as per suggestions
}
class ImageController {
def imageService
def upload = { PhotoUploadCommand puc ->
def user = User.findByUserId(puc.userId)
user.profile.photo = puc.photo
//user.profile.photo = request.getFile('photo') // also tried - N/G
redirect(controller: 'user', action: 'profile', id: puc.userId)
}

如果我注释掉所有以 class ImageController { 开头的代码并以结束 } 结束它没有区别 - 因此,我一定是错的,这不是加载图像的地方。但是,在整个应用程序中,我找不到与加载照片直接相关的其他代码。所以它必须是来自 Profile.groovy 类的脚手架:
class Profile {
byte[] photo
//def photo // tried, but then the element is removed from the template
String fullName
String bio
String homepage
String email
String timezone
String country
String jabberAddress
String skin

static mapping = {
photo column: 'photo', sqlType: 'VARBINARY(10000)', nullable: 'true'
//photo(type: 'image') // also tried
}

static constraints = {
fullName(nullable: true)
// ...
//photo(nullable: true, maxSize: 1024 * 1024) // also tried
photo(nullable: true)
// ...
}

还有一个 UserContoller.class 包含所有这些相同的列,此外:
String userId
String password
String passwordRepeat

...和改变 byte[] photodef photo什么都不做 - 添加映射也不做。对于 Java 程序员来说非常困惑。

最佳答案

您可以使用 constraintsmapping影响休眠列类型的闭包:

使用约束

Grails 将检查 maxSizesize约束来告知必要的列的大小。

static constraints = {
photo maxSize: 10000
}

使用列定义

Grails 允许您在映射闭包中指定 sql 数据类型。这些可以特定于您的数据库供应商,但涵盖约束提示不够灵活以匹配您的数据库模式的情况。例如使用 postgres bytea 列。
static mapping = {
photo column: 'photo', sqlType: 'VARBINARY(10000)'
}

关于Grails 运行时异常 - 列“PHOTO BINARY(255) 的值太长”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595417/

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