Hibernate配置文件中映射元素详解(3)

转载 2014年11月27日 13:51:13
数据库表中,主键(Primary Key)用来识别记录,并保证每条记录的唯一性。在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相同来判断两对象是否相等。Hibernate为了解决两者之间的不同,使用对象标识符(OID)来标识对象的唯一性。OID是关系数据库中主键在Java对象模型中的等价物。在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系。如下代码所示,三次调用了Session的load()方法,分别加载OID为1或3的User对象。

Transaction tx = session.beginTransaction();
User user1 = (User)session.load(User.class,new Long(1));

User user2 = (User)session.load(User.class,new Long(1));

User user3 = (User)session.load(User.class,new Long(3));

System.out.println( user1 == user2 );

System.out.println( user1 == user3 );

 

  应用程序在执行上述代码时,第一次加载OID为1的User对象,从数据库中查找ID为1的记录,然后创建相应的User实例,并把它保存在Session缓存中,最后将该实例的引用赋值给变量user1。第二次加载OID为1的对象时,直接把Session缓存中OID为1的实例的引用赋值给变量user2。因此,表达式user1==user2的结果为true。

  标识的生成可以使用不同的策略,表1为Hibernate内置的标识生成策略。

  表1:Hibernate标识生成策略

标识符生成器 描述
increment 适用于代理主键。由Hibernate自动以递增方式生成。
identity 适用于代理主键。由底层数据库生成标识符。
sequence 适用于代理主键。Hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列。
hilo 适用于代理主键。Hibernate分局high/low算法生成标识符。
seqhilo 适用于代理主键。使用一个高/低位算法来高效的生成long,short或者int类型的标识符。
native 适用于代理主键。根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo。
uuid.hex 适用于代理主键。Hibernate采用128位的UUID算法生成标识符。
uuid.string 适用于代理主键。UUID被编码成一个16字符长的字符串。
assigned 适用于自然主键。由Java应用程序负责生成标识符。
foreign 适用于代理主键。使用另外一个相关联的对象的标识符。

 

  Hibernate映射类型

  在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate映射类型分为2种:内置映射类型和自定义映射类型。

  1、内置映射类型

  Hibernate对所有的Java原生类型、常用的Java类型如String、Date等都定义了内置的映射类型。表2列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。

  表2:Hibernate内置映射类型

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 定长字符

 

  2、自定义映射类型

  Hibernate提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义的映射类型需要实现net.sf.hibernate.UserType或net.sf.hibernate.CompositeUserType接口。具体的创建自定义映射类型的方法请参考hibernate官方文档或相关资料,这里不再详细介绍。

相关文章推荐

Hibernate配置文件中映射元素详解

  • 2008年11月28日 11:38
  • 63KB
  • 下载

Hibernate配置文件中映射元素详解(2)

在这段代码中,name是指属性名,class是类的名字,insert指的是被映射的字段是否出现在SQL的INSERT语句中,upate指出被映射的字段是否出现在SQL的UPDATE语句中,access...

Hibernate配置文件中映射元素详解

Hibernate配置文件中映射元素详解   对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。下面从一个映射的例子...

Hibernate配置文件中映射元素详解(1)

配置文件中映射元素详解 对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。下面从一个映射的例子开始讲解映射元素,映射...

Hibernate配置文件和映射元素解释

"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-conf...
  • zlb824
  • zlb824
  • 2011年12月07日 11:40
  • 420

Myeclipse自动生成Hibernate配置文件及实体类映射ORM

用Myeclipse自动生成HIbernate配置文件 1.新建一个Web项目,名字随便 2. 3. 4.然后点击菜单栏中的Windows-> Open Perspective...

hibernate配置文件,映射文件

hibernate: 优点和缺点 优点: * 数据缓存 * 面向对象编程 * 代码操作比较简单 缺点: ...

利用eclipse工具反向生成hibernate配置文件,domain类和映射文件

首先要意识到eclipse是一个集成开发环境,要想实现更多的功能,就必须下载好相关的插件 1.下载插件 点击help->install new software,输入相应的网址(对应的自行百度),这里...

添加JBoss插件中的hibernate tools后怎么创建hibernate配置文件和对数据库的表进行反转映射

1,创建配置文件hibernate.cfg.xml,在项目上右键-->new-->other-->hibernate,选择如图:然后next下一步 2,出现页面 我将要建立的hibernate.c...

Hibernate学习笔记(1)----用Ant与XDoclet自动生成Hibernate配置文件与映射文件

现在主要从事JavaWeb开发,一直都想把JavaWeb里用的最广泛的S2SH(Struts2,Hibernate,Spring)经典组合框架系统的学习一遍,之前学完了Struts2,那么接下来一段时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate配置文件中映射元素详解(3)
举报原因:
原因补充:

(最多只允许输入30个字)