第03章 单表映射
- 单类→单表的映射
①映射主键
②映射日期类型
③数据类型映射对照表
- Hibernate中主键生成方式
- hilo
①由Hibernate根据high/low算法生成主键
②hilo标识符生成器在生成标识符时,需要读取并修改HI_TABLE表中的NEXT_VALUE值
③完全不依赖于任何数据库系统
④OID必须为long、int或short类型,如果为byte则会抛出异常
<generator class= "hilo"> <param name= "table">HL_table </param> <param name= "column">NEXT_VALUE </param> <param name= "max_lo">]10</param > </generator> |
⑤高低算法
参见:《[Ymh_sirius]_参考资料:高低算法.doc》
-
- identity
①由具体数据库负责生成主键
②要求数据库将主键定义为自动增长类型
③支持自增主键的数据库:MySQL、DB2、微软SQLServer、Sybase等;
但是有局限性,因为Oracle不支持;
④OID必须为long、int或short类型,如果为byte则会抛出异常
-
- sequence
①利用底层的数据库提供的序列生成标识符
②要求底层数据库支持序列:DB2、Oracle
③OID必须为long、int或short类型,如果为byte则会抛出异常
④配置方式
<id name ="studentId" type="java.lang.Integer"> <column name ="STUDENTID" /> <generator class ="sequence"> <param name ="sequence">stu_seq</ param> </generator > </id > |
-
- native
①依据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或hilo
②由于native标识符生成器能够根据底层数据库系统的类型,自动选择合适的方式生成主键,所以非常适合跨数据库平台开发
③OID必须为long、int或short类型,如果为byte则会抛出异常
-
- assigned(指定的)
Hibernate和数据库都不负责生成主键的值,完全由程序员自己指定。
-
- 其他主键生成方式
select、seqhilo、foreign、guid等等
- 在Hibernate中映射日期和时间
- Java数据类型和JDBC API的对应关系
注:时间戳:从1970年1月1日0点0时0分0秒开始计时,到当前时间所经过的毫秒数
-
- Hibernate中的日期映射方式
大部分情况下Hibernate可以根据Java类型自动找到对应的Hibernate映射类型,从而确定数据库表中的字段类型,但如果一个Java类型对应的Hibernate映射类型不只一个,那么就必须为Java类型明确指定Hibernate映射类型,例如:
- Hibernate映射类型对照表
Java类型 | Hibernate映射类型 | 标准SQL类型 | 大小 |
java.lang.Integer/int | integer/int | INTEGER | 4字节 |
java.lang.Long/long | long | BIGINT | 8字节 |
java.lang.Short/short | short | SMALLINT | 2字节 |
java.lang.Byte/byte | byte | TINYINT | 1字节 |
java.lang.Float/float | float | FLOAT | 4字节 |
java.lang.Double/double | double | DOUBLE | 8字节 |
java.math.BigDecimal | big_decimal | NUMERIC | |
java.lang.Character/java.lang.String/char | character | CHAR(1) | 定长字符 |
java.lang.String | string | VARCHAR | 变长字符 |
java.lang.Boolean/boolean | boolean/yes_no/true_false | BIT | 布尔类型 |
java.util.Date/java.sql.Date | date | DATE | 日期 |
java.util.Date/java.sql.Timestamp | timestamp | TIMESTAMP | 日期 |
java.util.Calendar | calendar | TIMESTAMP | 日期 |
java.util.Calendar | calendar_date | DATE | 日期 |
byte[] | binary | BLOB | BLOB |
java.lang.String | text | TEXT | CLOB |
实现java.io.Serializable接口的任意Java类 | serializable | BLOB | BLOB |
java.sql.Clob | clob | CLOB | CLOB |
java.sql.Blob | blob | BLOB | BLOB |
java.lang.Class | class | VARCHAR | 定长字符 |
java.util.Locale | locale | VARCHAR | 定长字符 |
java.util.TimeZone | timezone | VARCHAR | 定长字符 |
java.util.Currency | currency | VARCHAR | 定长字符 |