Hibernate:自动版本控制可空列

3

我有一个包含大量数据的表格。我想为这个表格添加hibernate自动版本控制。但是由于数据量太大,为了实现版本控制而向这个表格添加非空列非常昂贵。是否有一种解决方法,使得hibernate可以使用可空列?目前,hibernate会因为尝试增加null值而导致NPE。

如果有其他版本控制策略也欢迎提供。谢谢!

1个回答

2
如果你的数据库支持,你可以使用DEFAULT选项。这在Oracle上是不被支持的。
注:原文中的“flavour”意为“类型”或“种类”,在翻译时根据语境选择相应的译词。
SQL> create table t23 as select object_id as id from user_objects;

Table created.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER

SQL> alter table t23 add hibernate_version_number number default 0 not null;

Table altered.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 HIBERNATE_VERSION_NUMBER                  NOT NULL NUMBER

SQL> select count(*) from t23 where hibernate_version_number = 0;

  COUNT(*)
----------
       504

SQL>

不过,您可能仍然希望针对实际数据量来进行性能基准测试。这并不一定解决您的问题。


这仅适用于Oracle 11g,其中添加默认值是一个常数时间操作,请参见http://www.dba-oracle.com/t_oracle_column_default_value.htm。 - Rico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接