如果休眠映射文件中没有定义长度属性怎么办,那么列的默认值是啥? [关闭]

Posted

技术标签:

【中文标题】如果休眠映射文件中没有定义长度属性怎么办,那么列的默认值是啥? [关闭]【英文标题】:what if length attribute is not defined in hibernate mapping file, what will be the default value for a column then? [closed]如果休眠映射文件中没有定义长度属性怎么办,那么列的默认值是什么? [关闭] 【发布时间】:2018-08-28 13:03:35 【问题描述】:

如果我没有在我的休眠映射 hbm.xml 文件中定义长度属性会发生什么?

该列的默认长度值是多少?

谢谢

【问题讨论】:

“一次拍摄”是什么意思?一条 SQL 语句?单个 PL/SQL 块?单笔交易? 是的,你所有的问题 Oracle不支持事务性DDL,所以这部分是不可能的。 所以我必须运行 alter command 100 次? 是的,可以在 SQL 中手动,也可以在 PL/SQL 中使用循环 【参考方案1】:

既然您标记了 SQL Developer...

You can grab this XML extension from our GitHub repo。特别是“MultiSelectObjectExample”

添加后,您可以在连接树中多选大量表,右键单击,然后生成要运行的代码。

假设您想在一堆表中添加一个名为 *** 的列,即 VARCHAR2(4000)。

选择表格,单击鼠标右键。

然后在弹出的对话框中:

将该文本块复制到 SQL 工作表。

运行它。

看到我在红框中的按钮了吗?如果你点击它,它会将输出复制到一个新的 sql 工作表中,以便你运行它。

这是很多步骤,但是如果您需要 GUI 帮助来动态地对很多对象执行某些操作,它可能非常有用。

您当然可以更改代码以将该文本添加到局部变量并使用 EXECUTE IMMEDIATE,但是这样一来就很容易弄乱 100 个表。我喜欢 DBMS_OUTPUT 方式,因为它迫使我在执行代码之前查看代码。

【讨论】:

【参考方案2】:

循环遍历表列表并使用 execute immediate 执行您需要的更改脚本

在这个例子中,我重命名了在我的用户下创建的所有表

begin

  for rec in (select * from user_tables)
    execute immediate 'ALTER TABLE '|| rec.table_name|| ' RENAME TO DUP_'|| rec.table_name;
  end Loop;

end;
/ 

然后您可以从数据字典中动态生成您需要的 alter 命令

【讨论】:

以上是关于如果休眠映射文件中没有定义长度属性怎么办,那么列的默认值是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

休眠映射异常:无法确定列的类型

使用休眠获得更少的列

如何使用类属性映射休眠中的列?

休眠的动态类

将 MySQL JSON 列映射到休眠值类型

在 Oracle 上休眠:将字符串属性映射到 CLOB 列