[英]Grails GORM how to load existing remote DB tables in my application
[英]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.