Hibernate hbm文件下property标签属性之type

1. java.lang.String 或 hibernate string

<property name="description" type="java.lang.String"></property>

<property name="description" type="string"></property>

建表时:

mysql-->description varchar(255)

oracle-->description varchar2(255)

  1. 从上文中可以发现,当property type值为java.lang.String或string时,如果没有为property执行length属性,则hibernate默认会将字段设置为255个字符长度
  2. mysql下,如果设置length的值<=255,则hibernate建表时生成的字段类型是varchar(len),如果length的值>255,则hibernate建表时生成的字段类型是longtext
  3. oracle下,如果设置length的值<=4000,则hibernate建表时生成的字段类型是varchar2(len),如果length的值>4000,则hibernate建表时生成的字段类型是long,注意当前的long不是长整型,其最多可以存储2GB数据。

2. hibernate text

<property name="description" type="text"></property>

建表时:

mysql-->description longtext

oracle-->description varchar(255),但是去数据库查看ddl,发现是description varchar2(255)

  1. oracle下,如果length属性的值最大为4000,如果超过4000,抛异常:ERROR: ORA-00910: 指定的长度对于数据类型而言过长
  2. oracle下,hibernate输出的建表语句都是description varchar(len),但是去数据库查看ddl,发现是description varchar2(len),这里需要注意的

3. java.sql.Clob

<property name="description" type="java.sql.Clob"></property>

建表时:

mysql-->description longtext

oracle-->description clob

  1. mysql下,即使更改length的值,hibernate建表时,字段类型依然是longtext
  2. oracle下,即使更改length的值,hibernate建表时,字段类型依然是clob 

4. java.util.Date 或 java.sql.Timestamp 或 hibernate timestamp

<property name="expireTime" type="java.util.Date"/>

<property name="expireTime" type="java.sql.Timestamp"/>

<property name="expireTime" type="timestamp"/>

建表时:

mysql-->expireTime datetime

oracle-->expireTime date

    1. mysql下,datetime类型的字段可以存储日期和时间,如下图所示:

    2. oracle下,date类型字段可以存储日期和时间,如下图所示:

5. java.sql.Date 或 hibernate date

<property name="expireTime" type="java.sql.Date"/>

<property name="expireTime" type="date"/>

建表时:

mysql-->expireTime date

oracle-->expireTime date

    1. mysql下,date类型的字段仅仅可以存储日期,如下图所示:

    2. oracle下,date类型字段可以存储日期和时间,如下图所示:

6. java.sql.Time 或 hibernate time


<property name="expireTime" type="java.sql.Time"/>

<property name="expireTime" type="time"/>

建表时:

mysql-->expireTime time

oracle-->expireTime date

    1.mysql下,time类型字段仅仅可以存储时间,如下图所示:

    2. oracle下,date类型字段可以存储日期和时间,如下图所示:

你可能感兴趣的:(Hibernate,type,hbm)