Hibernate主键产生器总结

Hibernate主键产生器的可选项说明:
1) Assigned
     主键由外部程序负责生成,无需Hibernate参与。
2) hilo
     通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。
3) seqhilo
     与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4) increment
     主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。
     这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
5) identity
      采用数据库提供的主键生成机制。如DB2/SQLServer/MySQL中的主键生成机制。
6) sequence
      采用数据库提供的sequence机制生成主键。如Oralce中的Sequence。
7) native
      由Hibernate根据底层数据库自行判断采用identity/hilo/sequence其中一种作为主键生成方式。
8) uuid.hex
      由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
      与uuid.hex 类似,只是生成的主键未进行编码(长度32)。在某些数据库中可能出现问题(如PostgreSQL)。
10) foreign
      使用外部表的字段作为主键。


Hibernate映射类型 Java类型 标准SQL类型 大小
integer/int java.lang.Integer/int INTEGER 4字节
long java.lang.Long/long BIGINT 8字节
short java.lang.Short/short SMALLINT 2字节
byte java.lang.Byte/byte TINYINT 1字节
float java.lang.Float/float FLOAT 4字节
double java.lang.Double/double DOUBLE 8字节
big_decimal java.math.BigDecimal NUMERIC ?
character java.lang.Character/
java.lang.String/char CHAR(1) 定长字符
string java.lang.String VARCHAR 变长字符
boolean/ yes_no/true_false java.lang.Boolean/Boolean BIT 布尔类型
date java.util.Date/
java.sql.Date DATE 日期
timestamp java.util.Date/
java.util.Timestamp TIMESTAMP 日期
calendar java.util.Calendar TIMESTAMP 日期
calendar_date java.util.Calendar DATE 日期
binary byte[] BLOB BLOB
text java.lang.String TEXT CLOB
serializable 实现java.io.
Serializablej接口
的任意Java类 BLOB BLOB
clob java.sql.Clob CLOB CLOB
blob java.sql.Blob BLOB BLOB
class java.lang.Class VARCHAR 定长字符
locale java.util.Locale VARCHAR 定长字符
timezone java.util.TimeZone VARCHAR 定长字符
currency java.util.Currency VARCHAR 定长字符

你可能感兴趣的:(java,oracle,sql,算法,Hibernate)