【问题标题】:How can I persist List<String> into single column using GORM and Hibernate?如何使用 GORM 和 Hibernate 将 List<String> 持久化到单列中?
【发布时间】:2012-02-08 18:58:43
【问题描述】:

我想使用带有 GORM 和 Hibernate 的 Grails 将 List 字段保存到单个 VARCHAR 列中。我已经编写了一个 Hibernate 自定义类型,但无法弄清楚如何让 GORM/Hibernate 将列表字段视为持久性:

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

“listOfStrings”映射被忽略。有任何想法吗?现在我已经使用一个额外的字符串字段和一个 set/get 来对列表进行编码和解码。

【问题讨论】:

  • 不能使用@Type(..)注解吗?

标签: hibernate grails grails-orm


【解决方案1】:

我以前没有编写过自定义类型,但我想为您创建一个临时变量 listOfStrings,并有一个事件处理程序来为您编组和解组字符串列表。例如。 onLoad 可以执行listOfStrings = internalVarName.split(),onUpdate 可以执行internalVarName = listOfStrings.join(' ')

另一个想法是将字符串列表包装到您自己的类型中,因为 GORM 可能对包含特定类型代码的关联进行特殊处理。我不知道这个事实,只是猜测。

【讨论】:

  • 你回答的第一部分基本上就是我所做的。如果我不需要的话,我真的不想创建一个 ListOfStrings 类型来完成这项工作。更愿意使用当前的解决方法。
  • 我认为第二个选项更有价值。在第一个选项中,当您的一个字符串中包含分隔符时会发生什么?
  • @Matt - 同意第二个解决方案在架构上更纯粹 - 但这取决于您是否想经历创建新类的麻烦等。第一个解决方案将完成工作,并且至于分隔符 - 这显然取决于您期望的数据类型。例如,如果它是一个多选下拉菜单,那么您可以轻松管理分隔符。
【解决方案2】:

我认为这里的一个好方法是依赖一些现有的第三方库,这些库已经实现了自定义数据类型所需的 Scanner/Valuer 接口,因此您可以执行以下操作:

import (
  "github.com/lib/pq"
)

type Post struct {
  Tags   pq.StringArray `gorm:"type:text[]"`
}

这个 sn-p 类似于 gorm 文档中用于自定义数据类型的代码,在此处找到 https://gorm.io/docs/data_types.html,它允许您利用现有的高度支持的 postgres 驱动程序进行 go。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2015-05-26
    • 2015-01-12
    • 2012-02-08
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多