2011-01-26 153 views
1

非我创建了一个数据库,前一段时间使用Hibernate(JPA),但是我并没有列入任何实体@version领域。 原来,这个项目变得非常重要,现在我需要使用版本控制(乐观锁定版本控制)。休眠:添加版本化版本DB

我知道我需要使用@version注释为每个实体添加一个新的属性(字段)。

问题: 有谁知道我该如何更新真正的数据库(mysql)以包含没有数据丢失和过多工作的版本列?

非常感谢。

回答

3

创建一条SQL语句,为所需的所有实体和@Version属性创建表的列。然后使用其他查询该列的所有行的值设置为1

一点点的另一种方法是创建具有默认值的列,然后删除默认的。 (Works的MYSQL)

ALTER TABLE xyz ADD version integer NOT NULL DEFAULT 1; 
ALTER TABLE xyz CHANGE version version integer NOT NULL; 

这种方法的purpuse是,只要你不运行的第二条语句(删除默认),旧的应用程序将运行,即使它不是一个值设置为version列创建新对象时。

+0

非常感谢。我想过做这样的事情。但是,我不知道是否为版本字段手动插入值会导致一些麻烦。非常感谢。 – Marcus 2011-01-27 23:44:19

3

在Oracle中DDL这将是 alter table xyz add (version NUMBER default 1 not null);

+0

对其他用户有用谢谢。 – Marcus 2011-03-22 13:11:00