我想保留List< String>使用带有GORM和Hibernate的Grails将字段转换为单个VARCHAR列。我编写了一个Hibernate自定义类型,但无法弄清楚如何让GORM / Hibernate将列表字段视为持久性:
class User {
List<String> listOfStrings
static mapping = {
listOfStrings(type: StringListType, length: 512)
}
}
忽略'listOfStrings'映射。有任何想法吗?现在我使用额外的String字段和set / get对List进行编码和解码来解决这个问题。
答案 0 :(得分:2)
我之前没有编写过自定义类型,但我认为你有一个想法是将listOfStrings作为一个瞬态变量,并有一个事件处理程序来为你编组和解组字符串列表。例如。 onLoad可以执行listOfStrings = internalVarName.split()
,而onUpdate可以执行internalVarName = listOfStrings.join(' ')
。
另一个想法是将字符串列表包装到您自己的类型中,因为GORM可能对包含特定类型代码的关联进行特殊处理。我不知道这是事实,只是推测。
答案 1 :(得分:0)
我认为这里的一种好方法是依靠一些现有的第三方库,这些库已经实现了自定义数据类型的Scanner / Valuer接口gorm需求,因此您可以执行以下操作:
import (
"github.com/lib/pq"
)
type Post struct {
Tags pq.StringArray `gorm:"type:text[]"`
}
此代码段类似于gorm文档中用于https://gorm.io/docs/data_types.html处的自定义数据类型的代码,它使您可以利用现有的受高度支持的postgres驱动程序进行迁移。