Grails 唯一约束无法更新

Posted

技术标签:

【中文标题】Grails 唯一约束无法更新【英文标题】:Grails unique constraint fail to update 【发布时间】:2015-12-10 15:59:11 【问题描述】:

我知道这个问题与其他帖子有关,但没有一个能解决我的问题。

我正在使用Grails 2.5.1,使用oracle 数据库。

我收到了domain class CardMaster。它包含user_id, card_no and password

在约束下,我将card_no 定义为unique by user_id

然后我想使用user_id 作为Primary Key,所以我将id 映射为:

id name:'user_id', generator: 'assigned'

但是,当我找到并更新 findByUser_id 的记录时。我有一个错误。它说card_no 必须是唯一的并且无法保存。

我阅读了other posts,他们说更改主键似乎没有映射为id。如果我通过以下方式更改映射:

id column:'user_id', generator: 'assigned'

它成功保存,但在表中,出现了 2 个名为 user_id 的列,1 个为 user_id 提供,其他为 id

我们将不胜感激任何解决方案。

谢谢。

更新

以下是域类的完整代码:

class CardUserMaster 
    String card_no
    String user_id
    String password
  static constraints = 
    card_no(nullable: false, blank: false, maxSize: 19, unique: 'user_id')
    user_id(nullable: false, blank: false, maxSize: 10, minSize: 6)
    password(nullable: false, blank: false, maxSize: 32, minSize: 8)
  static mapping = 
        table('CARDUSER_MASTER')
        id name: 'user_id'
        version false
        id generator: 'assigned'
    

【问题讨论】:

嗯,同一个表中不可能有两个同名的列。其他事情正在发生。如果您发布域类的代码,将会有很长的路要走。 给你。伊曼纽尔·罗莎。 【参考方案1】:

将您的映射更新为:

static mapping = 
        table('CARDUSER_MASTER')
        id column:"user_id", name: 'user_id', generator: 'assigned'
        version false
    

我们需要提供主键所指的 db 中的实际列名以及我们想要一起使用的主键的自定义名称。

【讨论】:

在相同的情况下遇到相同的问题,添加列为我解决了。

以上是关于Grails 唯一约束无法更新的主要内容,如果未能解决你的问题,请参考以下文章

冲突部分索引的 Postgres 唯一或排除约束无法更新票证

如何修复“无法添加或更新子行:外键约束失败”[重复]

即使 grails-wrapper.jar 更新,Grails 也无法工作

Grails 突然抛出错误无法确定数据库名称的 Hibernate 方言

Grails 数据库迁移插件静默无法添加非空约束

Hibernate:无法添加或更新子行:外键约束失败