如何在 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 中的数据库中持久化闭包?的主要内容,如果未能解决你的问题,请参考以下文章

Grails、GPars 和数据持久性

使用闭包跨域开发

如果在添加关系后调用 Grails save() 不会保存

GORM数据服务VS Grails服务

grails连接数据库

JS中的闭包