首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建后更改hibernate中模型对象的数据类型

问创建后更改hibernate中模型对象的数据类型
EN

Stack Overflow用户
提问于 2015-04-21 12:04:16
回答 3查看 6K关注 0票数 6

我在学冬眠。我有点困惑于hbm2dll.auto更新属性。更改模型对象数据类型并不改变mysql中表的数据类型。

首先,我创建了以userId作为数据类型int的用户Pojo。最初,我将hbm2dll属性设置为CREATE。

代码语言:javascript
复制
@Entity(name="user")
public class User {
    @Id
    private int userid; 
    private String username;
    ....

}

首先,为了持久化数据,我创建了如下所示的用户对象,并使用sessionFactory保存。

代码语言:javascript
复制
User user = new user();
     user.setUserid(1);
     user.setUsername("First User");

由于上面的努力,用户表被创建在userid数据为int的位置。

但后来,我将pojo的userid数据类型更改为string。

此外,我还将hbm2ddl属性更改为update。

因此,在此更改之后,即使用户对象也有字符串作为userid,表userid数据类型也不会更改为varchar。如何使用hibernate更改表的数据类型。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-21 12:19:53

我相信update不能改变数据类型。

假设string类型的字段将更改为Integer。现有数据会发生什么变化?

因此,如果表不是空的,则不能保证更新(数据类型更新)。

票数 2
EN

Stack Overflow用户

发布于 2016-11-21 12:55:04

根据我的理解,hibernate将不允许您直接更新字段数据类型,为此,我们必须对当前字段进行备份,然后需要创建新字段,然后在新字段中复制备份数据。

如果我错了,也请纠正我。

票数 2
EN

Stack Overflow用户

发布于 2015-04-21 15:21:27

如果不想丢失旧数据,可以手动执行以下操作:

  1. 使用新的数据类型添加新的可选列
  2. 用旧列的值更新新列(使用转换)
  3. 删除旧列
  4. 重命名新列(并非所有方言都支持此名称)
  5. 将列标记为not-null (可选)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29771724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档