如何在 Grails 中的数据库中持久化闭包?
Posted
技术标签:
【中文标题】如何在 Grails 中的数据库中持久化闭包?【英文标题】:How to persist Closure in Database in Grails? 【发布时间】:2012-11-14 23:57:18 【问题描述】:我正在尝试将 Groovy 闭包(allegedly serializable)作为我的 Grails 域对象之一的属性。目前我基本上是这样做的:
class MyClass
....
Closure myClosure
static mapping = myClosure size: 1024 * 1024, type: 'blob'
new MyClass(myClosure: ... do some stuff .. .dehydrate()).save()
我尝试将“blob”更改为“binary”,但这不起作用。我收到类似于以下内容的错误: context.GrailsContextLoader 执行引导时出错:BootStrap$_obj_closure3 无法转换为 java.sql.Blob
我应该如何设置我的域对象以便能够存储闭包?
我正在使用 Grails 2.1.1 和 Groovy 2.0
【问题讨论】:
试试 type: 'serializable' 而不是 type: 'blob' 我得到:Value too long for column "EXTRACT BINARY(255) NOT NULL
您确定如果您设法存储它,您将能够检索和使用它吗?编译 Grails 应用程序时,闭包被转换为 Java 类。
是的,我搞定了。看我的回答。对于序列化,Groovy 支持 hydrate/dehydrate 方法来处理上下文问题。
【参考方案1】:
我需要这个:
static mapping =
myClosure sqlType: 'blob'
【讨论】:
以上是关于如何在 Grails 中的数据库中持久化闭包?的主要内容,如果未能解决你的问题,请参考以下文章