在休眠逆向工程之后,Number变为BigDecimal?

时间:2013-12-25 05:41:42

标签: oracle hibernate numbers bigdecimal

我在 oracle数据库中将字段设置为数字,如下所示。

  

名称类型长度标度
  EMP_GENDER NUMBER 0 0

在休眠逆向工程之后,该字段的类型变为 BigDecimal

private BigDecimal empGender;

但是当我在数据库中将长度设置为 2 时,它可能是正确的,并且实体中的字段类型变为整数
这怎么发生的?

1 个答案:

答案 0 :(得分:3)

当Hibernate对您的架构进行逆向工程时,将使用Oracle的Mete-data表来提取表和列信息。
其中一个将是user_tab_columns查看。

create table EMP (EMP_GENDER number);

要提取EMP表,您可以使用以下列信息:

select *
from user_tab_columns
where user_tab_columns.TABLE_NAME = 'EMP'

查询结果将表征EMP表的每一列 我们会看到DATA_TYPEDATA_LENGTHDATA_PRECISION列。
(使用Oracle 10 g)
enter image description here

拥有:

create table EMP (EMP_GENDER number(2));

我们会看到 enter image description here

当不定义数字类型的精度时,DATA_LENGTH(默认为22)将被视为精度。
因此,长度为22的数字将被Hibernate转换为大小数(超过decimal数据类型的最大精度)
当数字类型精度等于2时,Integer数据类型就足够了。

您必须在创建表时指定精确的数字精度以防止出现此问题。