将 hasMany = [field:String] 映射到数据库字段 TEXT

Posted

技术标签:

【中文标题】将 hasMany = [field:String] 映射到数据库字段 TEXT【英文标题】:Mapping hasMany = [field:String] to a database field TEXT 【发布时间】:2010-12-28 16:01:39 【问题描述】:

是否可以将 hasMany 关联到原始类型(在我的情况下为字符串)的数据库列类型设置为特定值?我知道如何设置字段(请参阅this question),但这是不同的。

  List textRecords
  static hasMany = [
          textRecords:String,
  ]

我想确保我的 textRecords 映射到 TEXT 或 LONGTEXT 数据库类型。

我可以创建一个单独的域类,它只包含一个字符串字段并映射该字段,但这似乎是一个 kluge。

【问题讨论】:

【参考方案1】:

Grails 用户指南在5.2.1.4 Basic Collection Types 部分列出了一个与您想要完成的非常相似的示例。

请记住,每次您想将 textRecord 添加到该对象时,它都必须加载整个 textRecord 列表才能再次保存它。出于性能原因,这可能不是您想要的行为。

你最终会得到一个像这样的映射块:

static mapping = 
       hasMany joinTable:[name:'bunch_o_text_records', key:'domain_id', column:'text_record', type:"text"]       

【讨论】:

感谢您为我指明了正确的方向,即使是 5 年后!但是hasMany joinTable 应该是textRecords joinTable。另外,我必须使用sqlType: "text" 而不是type: "text" 来让它实际创建一个文本列类型,至少在Grails 2.5.0 和mysql 驱动程序中是这样。您还可以在其他数据库引擎中使用longtext 等,或clob

以上是关于将 hasMany = [field:String] 映射到数据库字段 TEXT的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - 如何一次通过记录保存单个 hasMany,每个 hasMany 有多个 belongsTo 记录?

Mongoose/Node:将元素推入数组类型的文档字段?

映射hasMany关系并保存相关数据

extjs 5 商店同步绑定到选择 hasMany

HasOne 和 HasMany 用于同一张表 cakephp

使用 hasMany 关联在 ExtJS 中填充存储