- 浏览: 10468 次
- 性别:
- 来自: 上海
最新评论
文章列表
<a href="http://count.chanet.com.cn/click.cgi?a=434621&d=89940&u=&e=" target="_blank"><IMG SRC="http://file.chanet.com.cn/image.cgi?a=434621&d=89940&u=&e=" width="250" height="250" border="0"></a> ...
在这里只介绍one2one单向外键关联和one2one双向外键关联,至于one2one单向主键关联和one2one双向主键关联在这里就不在介绍了。。
one2one单向外键关联是,many2one关联的特例,在想要关联的一端 设置unique属性为true就可以了。
实例代码如下
<hibernate-mapping> <class table="person" name="com.sias.model.Person"> <id access="field" name ...
实体状态自由状态……实体对象在内存中自由存在,与数据库中的记录没有任何关联,处理自由状态的实例可以通过Session的save方法转换成持久状态。持久状态……实体对象处于由Hibernate框架所管理的状态,持久状态的对象其变更将由Hibernate固化到数据库中,持久对象对应数据库中的一条记录。游离状态……处于持久状态的实例,其关联的会话已经关闭,则此实例处于 游离状态。 游离状态的实例可以通过Session的 update方法再次和一个会话关联。游离状态和自由状态实例的区别是自由状态的实例与数据库缺乏对应关系,而游离状态的实例包含对应数据库记录的主键值。
通过get和load方法,都可以从数据库中加载数据,但是两个有以下几点区别
1:使用load加载生成的是代理的对象,只有当真正的用到的时候才会发出sql语句,而是用get方法得到的是真实的对象
2:load支持lazy的加载,当真正的用到对象的属相的时候,才会发出sql语句,而get方法不支持lazy的加载。
3:如果数据库中不存在相应的记录的时候,用get方法返回的值为null,而load方法则会抛出异常
优点
1:jdbc的操作比较繁琐,hibernate没有涉及到原生的sql语句屏蔽了底层的实现,提高了生产效率
2:sql语句是面向过程的,hibernate是开发更oo了直接对对象进行增删改查
3:hibernate 是的or映射跨越数据库平台,移植性比较好。
4;支持透明的持久化,单纯的pojo不需要实现任何的接口和继承任何的类,值需要修改配置文件即可
缺点
但是批量的操纵不合适,使用数据库特定的功能(如优化机制)
重点:对象关系的映射,缓存的使用
在需要连接数据库的时候,就用到了session
1:session的创建
session通常通过以下2中方式来创建
A Session session=SessionFactory.openSession();
第一种方法每次获得的都是一个新的session,
B Session session=SessionFacotry.getCurrentSession();:
第二种方法得到的是当前环境中的session
当session commit的以后,在那session的时候就是一个 ...
sessionfacotry是线程安全的,在整个的application生命周期中,sessionfactory只实例化一次,每一个数据只对应一个sessionfactory对象,sessionfactory的创建比较耗费时间,
sessionfactory的主要作用用于产生和管理session
以前也学习过一段时间的hibernate,并且用hibernate过几个比较小的项目。发现了很多以前不太理解的东西,于是决定,重新系统的学习一下,特在此处写个blog.
hibernate中的configuration,是用来加载hibernate.cfg.xml配置文件,默认加载的路径是src下面如下图说示:
自己也可以给hibernate.cfg.xml重新命名,放在其他的位置,只需要在configuration初始化的时候指明,初始化的路径即可,代码如下
configuration = new Configuration().configure("/abc/ ...