我前段时间使用hibernate(JPA)创建了一个db,但是我没有为任何实体包含@version字段。 事实证明这个项目变得很重要,现在我需要使用版本控制(使用乐观锁定进行版本控制)。
我知道我需要使用@version注释为每个实体添加一个新属性(字段)。
问题: 有谁知道如何更新真正的数据库(mysql)以包含版本列而不会丢失数据并且工作量太大?
非常感谢。
答案 0 :(得分:3)
创建一个SQL语句,该语句为您想要的所有实体的表和@Version属性创建列。然后使用其他查询将所有行的此列的值设置为1.
另一种方法是使用默认值创建列,然后删除默认值。 (适用于MYSQL)
ALTER TABLE xyz ADD version integer NOT NULL DEFAULT 1;
ALTER TABLE xyz CHANGE version version integer NOT NULL;
这种方法的缺点是只要你不运行第二个语句(删除默认值),旧的应用程序就会运行,即使它在创建新的时没有为version
列设置值。对象。
答案 1 :(得分:3)
alter table xyz add ( version NUMBER default 1 not null );