如何使用GORM和Hibernate将List <string>持久保存到单个列中?</string>

时间:2012-02-08 18:58:43

标签: hibernate grails gorm

我想保留List&lt; String&gt;使用带有GORM和Hibernate的Grails将字段转换为单个VARCHAR列。我编写了一个Hibernate自定义类型,但无法弄清楚如何让GORM / Hibernate将列表字段视为持久性:

class User {
    List<String> listOfStrings
    static mapping = {
        listOfStrings(type: StringListType, length: 512)
    }
}

忽略'listOfStrings'映射。有任何想法吗?现在我使用额外的String字段和set / get对List进行编码和解码来解决这个问题。

2 个答案:

答案 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驱动程序进行迁移。