当前位置:首页 > 尚学堂马士兵hibernate笔记(讲义)
Hibernate映射类型 Hibernate 映射类型 integer 或者 int long short byte float double big_decimal character string boolean yes_no true_false 映射类型 date time timestamp calendar calendar_date 映射类型 binary text serializable clob blob 骤:
1 在一个数据库事务中先保存一个空的 Blob 或 Clob 实例。 2
Java 类型 long Long short Short byte Byte float Float double Double java.math.BigDecimal char Character String String boolean Boolean boolean Boolean boolean Boolean 标准 SQL 类型 BIGINT SMALLINT TINYINT FLOAT DOUBLE NUMERIC CHAR(1) VARCHAR BIT CHAR(1) (Y-N) CHAR(1) (T-F) 标准 SQL 类型 TIME TIMESTAMP TIMESTAMP DATE 大小和取值范围 4 字节 8 字节 2 字节 1 字节 4 字节 8 字节 NUMERIC(8,2)8 位 定长字符 变长字符串 布尔类型 布尔类型 布尔类型 描述 YYYY-MM-DD HH:MM:SS YYYYMMDDHHMMSS YYYYMMDDHHMMSS YYYY-MM-DD Oracle 类型 BLOB CLOB BLOB CLOB BLOB int 或者 java.lang.Integer INTEGER 2 、 Java 时间和日期类型的 Hibernate 映射 Java 类型 Date Time Date Timestamp calendar calendar Java 类型 byte[] String Serializable 接口任意实现类 java.sql.Clob java.sql.Blob util.Date 或者 sql.Date DATE 3 、 Java 大对象类型的 Hibernate 映射类型 标准 SQL 类型 MySQL 类型 VARBINARY( 或 BLOB BLOB) CLOB BLOB) CLOB BLOB TEXT BLOB TEXT VARBINARY( 或 BLOB 在程序中通过 Hibernate 来保存 java.sql.Clob 或者 java.sql.Blob 实例时,必须包含两个步
接着锁定这条记录,更新上面保存的 Blob 或 Clob 实例,把二进制数据或文本数据写到 Blob 或 Clob 实例中
Hibernate SQL方言 (hibernate.dialect) RDBMS DB2 DB2 AS/400 DB2 OS390 方言 org.hibernate.dialect.DB2Dialect org.hibernate.dialect.DB2400Dialect org.hibernate.dialect.DB2390Dialect RDBMS PostgreSQL MySQL 方言 org.hibernate.dialect.PostgreSQLDialect org.hibernate.dialect.MySQLDialect MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect Oracle (any version) Oracle 9i/10g Sybase Sybase Anywhere org.hibernate.dialect.OracleDialect org.hibernate.dialect.Oracle9Dialect org.hibernate.dialect.SybaseDialect org.hibernate.dialect.SybaseAnywhereDialect Microsoft SQL Server org.hibernate.dialect.SQLServerDialect SAP DB Informix HypersonicSQL Ingres Progress Mckoi SQL Interbase Pointbase FrontBase Firebird
org.hibernate.dialect.SAPDBDialect org.hibernate.dialect.InformixDialect org.hibernate.dialect.HSQLDialect org.hibernate.dialect.IngresDialect org.hibernate.dialect.ProgressDialect org.hibernate.dialect.MckoiDialect org.hibernate.dialect.InterbaseDialect org.hibernate.dialect.PointbaseDialect org.hibernate.dialect.FrontbaseDialect org.hibernate.dialect.FirebirdDialect ID生成策略
1.XML方式配置
可选的
所有的生成器都实现org.hibernate.id.IdentifierGenerator接口。 这是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。当然, Hibernate提供了很多内置的实现。下面是一些内置生成器的快捷名字: ? ?
increment 用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支
持。 返回的标识符是long, short 或者int类型的。 ? ?
sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
hilo 使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key 和next_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。 ? ? ? ? ? ? ? ?
seqhilo 使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字。
uuid 用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。 guid 在MS SQL Server 和 MySQL 中使用数据库生成的GUID字符串。
native 根据底层数据库的能力选择identity, sequence 或者hilo中的一个。在mysql中默认的是auto_increment,SQLSERVER中是identity.
assigned 让应用程序在save()之前为对象分配一个标示符。这是
select 通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。 foreign 使用另外一个相关联的对象的标识符。通常和
使用@Id注解可以将实体bean中的某个属性定义为标识符(identifier). 该属性的值可以通过应用自身进行设置, 也可以通过Hiberante生成(推荐).
使用 @GeneratedValue注解可以定义该标识符的生成策略: 有四种策略 ? ? ? ?
AUTO -默认值.可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库..对于MYSQL,是auto_increment,对于Oracle是hibernate-sequence. TABLE - 使用表保存id值 (了解) IDENTITY - identity column
SEQUENCE - @SequenceGenerator
@GeneratedValue(strategy=GenerationType.XXXX)
XXXX取值为Type.SEQUENCE|TABLE|AUTO|IDENTITY不同的数据库对应着不同的生成策略. 例1 实体类注解 @Entity 主键进行注解 @Id
@GeneratedValue
默认值是@GeneratedValue(strategy=GenerationType.AUTO) 例2
使用SequenceGenerator @Entity
@SequenceGenerator(
name=\,sequenceName=\)
name是用户自定义的generator生成器的名字, sequenceName是生成到数据库后sequence对象的名字.
在实体中注解好后,就可以在id注解上写上对应的 @Id
@GeneratedValue(
strategy=GenerationType.IDENTITY,generator=\) 例3
表生成器(了解),这种方式会另外生成一个表. 实体类注解 @Entity
@javax.persistence.TableGenerator(//了解,更适合用于跨平台跨数据库.
name=\, //生成器generator的名字 table=\,//生成的表名 pkColumnName = \,//生成的表的字段名
valueColumnName = \,//生成的表的字段的值 pkColumnValue=\,// pk_key字段的值 allocationSize=1//自增变量 )
主键注解
@Id
@GeneratedValue(strategy=GenerationType.TABLE,generator=\)
? 联合主键生成策略
一般采用这种方式,比如有一个类Student(id,name,age),为了产生联合主键,把id和name分离出来. Student(pk,age) StudentPk(id,name)
StudentPk类必需实现序列化接口implements java.io.Serializable. StudentPk类必需重写boolean equals() ,int hasCode()方法 @Override
public boolean equals(Object o) { }
@Override
public int hashCode() {
if(o instanceof StudentPk) { }
return false;
StudentPk pk = (StudentPk)o;
if(this.id == pk.getId() && this.name.equals(pk.getName())) { }
return true;
共分享92篇相关文档