如何解决实体映射中的 Grails 错误重复列?在现有的 Postgresql 数据库上

Posted

技术标签:

【中文标题】如何解决实体映射中的 Grails 错误重复列?在现有的 Postgresql 数据库上【英文标题】:How To Solve Grails Error Repeated column in mapping for entity? on Existing Postgresql Database 【发布时间】:2011-05-26 08:33:36 【问题描述】:

您好,我在 Grails 中有以下域

类客户 静态映射 = 表“客户” // version 设置为 false,因为默认情况下旧数据库不可用 版本错误 id column:'customerid' //生成器:'identity', 长期客户 长customergroupid 字符串用户名 字符串密码 字符串名称 弦街 弦城 串省 字符串邮政编码 字符串国家 日期日期注册 弦平衡 长父代 字符串返利 字符串元路径 长元水平 整数 smsreplystatus 整数状态 字符串反转网址 静态约束 = 客户 ID(插入:假,更新:假) customergroupid(最大:9999999999L) 用户名(大小:1..20,空白:假) 密码(大小:1..32,空白:假) 名称(大小:1..20,空白:假) 街道(大小:0..50) 城市(大小:0..20) 省(大小:0..20) 邮政编码(大小:0..5) 国家(大小:0..20) 注册日期(可为空:真) 平衡() parentid(最大值:9999999999L) 父母回扣() 元路径(大小:1..255,空白:假) 元级别(最大值:9999999999L) 短信回复状态(最大值:99999) 状态(最大值:99999) 反转网址(大小:0..50) 字符串 toString() 返回“$customerid”

我有现有数据的当前数据库,并已使用 GRAG 映射到 GORM,但我收到此错误

原因:org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性“sessionFactory”时无法解析对bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.hibernate.MappingException:实体映射中的重复列:postgresql.Customer 列:customerid(应使用 insert="false" update="false" 映射) ... 23 更多 原因:org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的bean时出错:调用init方法失败;嵌套异常是 org.hibernate.MappingException:实体映射中的重复列:postgresql.Customer 列:customerid(应使用 insert="false" update="false" 映射)

【问题讨论】:

【参考方案1】:

11 年后就为这个鞠躬……

如果你放就会编译

customerid insertable:false updateable:false

在映射下而不是在约束下列出它;您还需要删除映射中“id”的内容。您收到此错误是因为您指定了映射到 customer_id 列的第二个变量“id”。

【讨论】:

【参考方案2】:

遇到同样的问题,删除“Long customerid”

这可能不是一个可行的解决方案,但至少应用程序会编译并创建表。

根本没有调查,因为我只是设法让这个工作 - 也许在设置自定义标识列时,属性定义是隐含的(因此“重复列...”错误)

【讨论】:

更新:失败,属性不存在错误,很好。解决方案,在自定义 id 列的映射闭包中添加 name:'customerid'。最后在 mysql 中为我工作。可以保留现有模式并给 grails 一个测试旋转... 除了在mapping中添加name属性(并且在mapping中添加insert:false,update:false,而不是constraint),还需要在自定义id列上添加约束nullable:true;否则,您将得到一个没有很好记录的空属性错误,其中任何一个 - 基本上花了几个小时尝试各种组合。快速开发框架浪费时间,讽刺 insert:false,update:false 没必要只映射 id column:'col', name:'col' 和约束 col(nullable:true) 最后对我有用! 感谢您更新此内容。我在使用 Grag 工具为现有的 mysql DB 生成域类时遇到了这个问题。 @ibaralf 祝你好运,几个月前我放弃了 Grails;转移到 Scala 并且非常高兴这样做。 Grails 是一次很好的学习体验,但是太多的事情出了差错,无法证明头部撞击是合理的......

以上是关于如何解决实体映射中的 Grails 错误重复列?在现有的 Postgresql 数据库上的主要内容,如果未能解决你的问题,请参考以下文章

引起:org.hibernate.MappingException:实体映射中的重复列

Hibernate:“实体中的重复列映射”与“不允许在属性中混合可更新和不可更新的列”

Grails:在控制器中设置啥以达到 URL 映射中的错误处理?

重复收集角色映射实体Hibernate,我不知道有什么问题

Grails:将枚举类型的mysql字段映射到域类

Symfony2:字段或鉴别器列映射中实体上列“id”的重复定义