创建后更改休眠模型对象的数据类型

时间:2015-04-21 12:04:16

标签: java mysql hibernate

我正在学习休眠。我对hbm2dll.auto更新属性感到困惑。模型对象数据类型的更改不会更改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");

由于上述努力,创建了用户表,其中userid数据为int。

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

此外,我更改了hbm2ddl属性以进行更新。

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

4 个答案:

答案 0 :(得分:2)

我相信update无法更改数据类型。

想象一下,string类型的字段将更改为Integer。现有数据会发生什么?

如果表不为空,则无法保证更新(数据类型更新)。

答案 1 :(得分:2)

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

如果我错了,请纠正我。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

删除数据库,让hibernate再次重新创建它。