Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:将版本控制添加到非版本数据库_Hibernate_Jpa_Locking_Versioning - Fatal编程技术网

Hibernate:将版本控制添加到非版本数据库

Hibernate:将版本控制添加到非版本数据库,hibernate,jpa,locking,versioning,Hibernate,Jpa,Locking,Versioning,不久前,我使用hibernate(JPA)创建了一个db,但是我没有为任何实体包含@version字段。 事实证明,这个项目变得很重要,现在我需要使用版本控制(带有乐观锁定的版本控制) 我知道我需要为带有@version注释的每个实体添加一个新属性(字段) 问题: 有人知道如何更新真实数据库(mysql)以包含版本列而不丢失数据和做太多工作吗 非常感谢。创建一条SQL语句,该语句为您要创建的所有实体的表和@Version属性创建列。然后使用其他查询将所有行的此列的值设置为1 另一种方法是使用默认

不久前,我使用hibernate(JPA)创建了一个db,但是我没有为任何实体包含@version字段。 事实证明,这个项目变得很重要,现在我需要使用版本控制(带有乐观锁定的版本控制)

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

问题: 有人知道如何更新真实数据库(mysql)以包含版本列而不丢失数据和做太多工作吗


非常感谢。

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

另一种方法是使用默认值创建列,然后删除默认值。(适用于MYSQL)


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

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

另一种方法是使用默认值创建列,然后删除默认值。(适用于MYSQL)

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

在Oracle DDL中也是如此
alter table xyz add(版本号默认值1不为空)

在Oracle DDL中
alter table xyz add(版本号默认值1不为空)

非常感谢。我想过做这样的事。然而,我不知道手动为version字段插入值是否会引起一些麻烦。再次非常感谢。非常感谢。我想过做这样的事。然而,我不知道手动为version字段插入值是否会引起一些麻烦。再次非常感谢。对其他用户有用。谢谢。对其他用户有用。谢谢
ALTER TABLE xyz ADD version integer NOT NULL DEFAULT 1;
ALTER TABLE xyz CHANGE version version integer NOT NULL;