Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态更改数据库列类型_Java_Mysql_Hibernate_Jpa_Jdbc - Fatal编程技术网

Java 动态更改数据库列类型

Java 动态更改数据库列类型,java,mysql,hibernate,jpa,jdbc,Java,Mysql,Hibernate,Jpa,Jdbc,给定一个理想情况下不应该停机的java服务,我想将表的列类型从varchar更改为longtext,同时保持服务的活动性 该服务正在使用spring-->jpa、hibernate和mysql数据库 该实体具有映射属性,我们称之为foobar,delcareeasstring 现在看起来是这样的: java实体:stringfoobar MySQL列:varchar(255)foobar 我想做一个表格修改,结果如下: java实体:stringfoobar MySQL列:Longtext

给定一个理想情况下不应该停机的java服务,我想将表的列类型从varchar更改为longtext,同时保持服务的活动性

该服务正在使用spring-->jpa、hibernate和mysql数据库

该实体具有映射属性,我们称之为foobar,delcareeasstring

现在看起来是这样的:

  • java实体:
    stringfoobar

  • MySQL列:
    varchar(255)foobar

我想做一个表格修改,结果如下:

  • java实体:
    stringfoobar

  • MySQL列:
    LongtextFoobar

问题

如果我更改mysql列并保持java服务运行,它仍然能够读/写该列,还是会抛出错误?

理论上我会说“是”,更改应该是透明的。所有这两种类型在JDBC中都由相同的
java.sql.types.VARCHAR
type表示

然而,这是一个理论,因为你的应用程序似乎很关键,我不会盲目相信这个理论

在DEV或测试环境中进行一个简单的测试将为您提供答案

只需确保使用完全相同的

  • 数据库版本
  • JPA版本
  • 休眠版本
  • JVM版本
  • 应用程序版本
  • 图书馆
  • 等等

最好的办法是尝试…@Sharon Ben Asher鉴于生产/开发环境的限制,在我的案例中:不。你试试,让我们知道怎么样?这种迁移最安全(也是最好)的方法总是(首先)在本地或开发环境中执行。如果它在那里工作,并且如果该环境与您的生产环境足够接近,那么继续吧。似乎很容易在非生产环境中重现这种情况。。。无论如何,考虑到你提到的限制,你有什么选择?你打算根据这里的答案在prod中实现更改吗?@SharonBenAsher如果他对prod环境有限制,因此无法更新数据库,他无论如何也无法更改。