繁体   English   中英

在不删除现有表的情况下更改Grails GORM格式

[英]Change Grails GORM format without dropping existing tables

我有一个已经运行了一段时间的Grails应用程序。 但是现在我想更改GORM格式,我想知道是否有简单的方法可以更改,即不需要删除现有表的方法,只需修改应用程序即可。

具体来说,我曾经有一个HashSet字段,该字段映射到DB中的varbinary。 该用户表中有一些现有行。

public class User{
    //irrelevant attributes omitted
    HashSet<String> friends=new HashSet<>();
    static mapping={
        friends sqlType: 'VARBINARY(10000)'
    }

}

现在,我已将字段friends更改为HashMap<String,Integer> 现在,尽管我仍然将字段映射到varchar,但每次保存User对象时,Grails都会引发异常:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

我首先怀疑Grails保留了将HashSet转换为varbinary的旧转换规则,并且没有更新。 因此,我尝试将映射从varbinary更改为Blob和文本,但均无效。

我想知道是否有办法让此列保留在DB的varbinary中,同时让Grails知道该属性现在位于HashMap中,并且应该生成新规则以进行转换。

感谢您的有见地的建议!

编辑:我使用Grails 2.4.4

我知道这样做的一种方法:登录数据库服务器,以便您可以在术语窗口中访问数据库。 首先在开发计算机上执行此操作。 查看相关列,并确切查看它们使用的数据类型。 然后,在开发计算机上,删除这些列并部署更改后的项目。 如果您将gorm设置为“更新”,则将创建新列。 再次检查相关的列,看看是否有任何方法可以将生产数据库中的旧列(更改表...)更改为新列。 您必须停止生产服务器,进行更改,部署新项目并重新启动它。 如果您不能只更改列,则可能必须创建新的列,将数据移到旧的列上并删除它们-所有这些都在应用程序服务器停止的情况下进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM