免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 992 | 回复: 0
打印 上一主题 下一主题

Hibernate之对象关系映射基础 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-20 11:31 |只看该作者 |倒序浏览
1.       对象关系映射基础
1)当Hibernate的Session在执行save(arg0)、update(arg0)或saveOrUpdate(arg0)方法时,会调用getXXX()方法,当Session在执行get()、load()和find()方法时会调用相应对象的setXXX(arg0)方法。另外,Hibernate可以访问任意权限级别的Hibernate方法,即便他是private类型的。


2.       property属性节点的access属性(property、noop和field)
property表示可以通过getXXX、setXXX方法访问
noop仅仅可以通过HQL来获取其值,其他方式均无效
field通过field域来进行访问
说明:如果在映射文件中存在property属性节点,但是在相应的持久化类中没有与之对应的属性,你仍然可以在HQL中访问,但是如果持久化类中的某些属性没有在映射文件中进行映射,那么就不可以通过HQL进行访问。


3.       带有业务属性的字段一般不会用来作为主键(自然主键),因为,当一旦出现允许出现客户重名的业务时,就必须修改数据模型,重新定义表的主键,给数据库的维护增加了难度。因此,更加合理的解决方案是使用代理主键,即不具备业务含义的字段,代理主键一般为整数类型,比字符串类型要节省更多的数据库空间。


4.       用OID(对象标志符)来区分对象,OID是代理主键在Java对象模型中的等价物
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event persistentInstance=(Event)session.load(Event.class,Long.parseLong("27"));
System.out.println(persistentInstance.getTitle());
Hibernate在取出对象时做一个判读,如果OID与缓存中的OID相同,则直接将其引用返回出去而不会进行重复创建。


5.       Hibernate的几种内置标帜符生成器
Increment:以递增的方式生成标帜符,步长为1.
Identity:由底层数据库生成标帜符,前提是底层数据库支持自动增长类型,如果数据库是Oracle数据库,则Hibernate会自动创建一个Sequence用来实现自动增长。
Sequence:Hibernate根据底层数据库的序列来生成标帜符,前提是底层数据库支持序列。
Hilo:Hibernate根据hign、low算法来生成标帜符,Hibernate把特定的字段作为hign值,在默认情况下选用Hibernate_unique_key表的next_hi字段
Native:根据底层数据库对自动生成数据库的支持能力来选择identity、sequence和hilo。
Uuid.hex:Hibernate采用128位的UUID(Universal Unique Identification)算法来生成标帜符。UUID能在网络环境中生成唯一的字符串标识符。这种标识符生成策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间
Assigned:由Java应用 程序负责生成自然主键,但此时的setId方法不可以设置为private。


6.       Increment标识符生成器:
由于Increment生成标识符的机制不依赖于底层数据库,因此适合于所有数据库系统。
适用于只有单个Hibernate进程访问同一个数据库的场合,在集群环境下不推荐使用。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


7.       Identity标识符生成器:
要求底层数据库必须支持自动增长字段类型,包括:DB2, MYSQL, MSSQL, SYBASE, HSQLDB, INFORMIX。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


8.       Sequence标识符生成器:
generator class="sequence">
    param name="sequence">HIBERNATE_SEQ_PERSONparam>
generator>
       也可以不明确指出具体使用哪个sequence ,Hibernate在进行初始化时如果碰到没有指定sequence 的对象-映射文件会自动产生一个默认的sequence 。
使用此项的前提是数据库支持sequence ,可以使用的数据库有Oracle,DB2,SAP DB和PostgreSQL。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


9.       Hilo标识符生成器

10.   Native标识符生成器








本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22374/showart_282308.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP