Hibernate的内置映射类型有那些?

Hibernate的内置映射类型通常使用和Java类型相同的名字,它能够把 Java基

本类型、Java 时间和日期类型、Java大对象类型及JDK中常用Java类型映射到相

应的标准SQL类型。

1  Java基本类型的Hibernate映射类型

2  Java时间和日期类型的Hibernate映射类型

在 Java 中,代表时间和日期的类型包括:java.uitl.Date 和java.util.Calendar。

此外,在 JDBC API 中还提供了 3 个扩展了java.uitl.Date类的子类:java.sql.Date、

java.sql.Time和java.sql.Timestamp,这3个类分别和标准SQL类型中的DATE、TIME

和 TIMESTAMP类型对应。

3  Java大对象类型的Hibernate映射类型

在 Java 中,java.lang.String 可用于表示长字符串 (长度超过 255),字节数组

byte[]可用于存放图片或长文件的二进制数据。此外,在 JDBC API 中还提供了

java.sql.Clob和java.sql.Blob类型,它们分别和标准 SQL 中的 CLOB和 BLOB 类型

应。CLOB表示字符串大对象 (Character Large Object),BLOB表示二进制大对

象 (Binary Large Object)。表 9-3 列出了 Hibernate 映射类型、对应的 Java大对象

4  IDK自带的个别Java类的Hibernate映射类型

5  使用Hibernate内置映射类型

Hibernate 的内置映射类型、Java类型和标准 SQL 类型三者之间的关系是固定

的。如图 9-1 所示,Monkey类的 id属性为 java.lang.Long,而 MONKEYS 表的 ID

字段为 BIGINT类型,那么应该用 Hibernate 的 long类型来映射它们;Monkey类的

name属性为 java.lang.String,而 MONKEYS 表的 NAME字段为 VARCHAR类型,

那么应该用 Hibernate 的 string类型来映射。

由于 Hibernate 的内置映射类型、Java类型和标准 SQL类型三者之间的关系是

固定的,因此在映射持久化类的属性时,有时可以省略设置 Hibernate 映射类型,

例如以下两种方式是等价的:

< property name=”name” type=”string” column=’ iNA ME” />

或者:

< property name=”name” column=”NAME” />

如果没有指定映射类型,Hibernate会运用反射机制,先判别 Monkey类的 name

属性的 Java类型,然后采用与此 Java类型对应的默认 Hibernate映射类型。例如与

java.lang.String类型对应的默认 Hibernate 映射类型为“string”。

但是,在一个 Java类型对应多个 Hibernate 映射类型的场合,有时必须显式指

定 Hibernate 映射类型。例如,如果持久化类的一个属性为 java.util.Date 类型,对

应的 Hibernate 映射类型可以是 date、time 或 timestamp。此时必须根据对应的数据

库表的字段的 SQL类型,来确定 Hibernate 映射类型。如果字段为 DATE类型,那

么 Hibernate 映射类型为 date;如果字段为 TIME类型,那么 Hibernate 映射类型为

time;如果字段为 TIMESTAMP类型,那么 Hibernate 映射类型为 timestamp。

Monkey类的 phone属性为 java.lang.Integer,而对应的奉的 PHONE

字段为 VARCHAR类型,那么应该用 Hibernate 的什么类型来映射呢?下面的两种

映射方式都是不正确的:

< proper ty name= ,’ phone ,, type–” integer ” column= ,, PHONE” / >

或者:

< property name=”phone” type=” string” column=”PHONE” />

当 Hibernate 持久化 Monkey 对象,无法自动把java.lang.Integer 类型的 phone

属性转换为字符串类型,因此会抛出 ClassCastException。在下一节,将介绍如何

利用 Hibernate 的客户化映射类型,把持久化类的任意类型的属性映射到数据库中。

你可能感兴趣的:(java,jdk,sql,Hibernate,jdbc)