我在 oracle数据库中将字段设置为数字,如下所示。
名称类型长度标度
EMP_GENDER NUMBER 0 0
在休眠逆向工程之后,该字段的类型变为 BigDecimal 。
private BigDecimal empGender;
但是当我在数据库中将长度设置为 2 时,它可能是正确的,并且实体中的字段类型变为整数。
这怎么发生的?
答案 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_TYPE
,DATA_LENGTH
和DATA_PRECISION
列。
(使用Oracle 10 g)
拥有:
create table EMP (EMP_GENDER number(2));
我们会看到
当不定义数字类型的精度时,DATA_LENGTH(默认为22
)将被视为精度。
因此,长度为22的数字将被Hibernate转换为大小数(超过decimal
数据类型的最大精度)
当数字类型精度等于2时,Integer
数据类型就足够了。
您必须在创建表时指定精确的数字精度以防止出现此问题。