【问题标题】:Changing Data type of model object in hibernate after creation创建后在休眠中更改模型对象的数据类型
【发布时间】:2015-04-21 12:04:16
【问题描述】:

我正在学习休眠。我对 hbm2dll.auto update property 有点困惑。模型对象数据类型的改变不会改变mysql中表的数据类型。

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

@Entity(name="user")
public class User {
    @Id
    private int userid; 
    private String username;
    ....

}

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

User user = new user();
     user.setUserid(1);
     user.setUsername("First User");

由于上述努力,在用户 ID 数据为 int 的位置创建了用户表。

但后来我把 pojo 的 userid 数据类型改成了 string 。

我还将 hbm2ddl 属性更改为 update 。

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

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

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

    假设字符串类型的字段将更改为整数。现有数据会怎样?

    所以如果表不为空,则不能保证更新(数据类型更新)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        1. 添加具有新数据类型的新可选列
        2. 用旧列的值更新新列(使用转换)
        3. 删除旧列
        4. 重命名新列(并非所有方言都支持)
        5. 将该列标记为非空(可选)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-11
          • 1970-01-01
          • 1970-01-01
          • 2017-06-26
          • 2015-08-31
          • 1970-01-01
          • 2015-05-25
          • 2017-03-12
          相关资源
          最近更新 更多