Hibernate的内置映射类型有那些?,hibernate映射
分享于 点击 27060 次 点评:88
Hibernate的内置映射类型有那些?,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 的客户化映射类型,把持久化类的任意类型的属性映射到数据库中。
相关文章
- 暂无相关文章
用户点评