初学hibernate笔记

 1.hibernate的三种对象状态
transient:顺势状态
persistent:持久化状态
detached:脱管状态
瞬时状态:内存中的对象在数据库中没有与之对应的记录,并且

此对象没有纳入session的管理,那么此时的对象的任何变化都不

会发出sql语句,也就是说o和r没有联动。
(判断对象和数据库是否关联的重要标准就是判断对象是否具有

持久化标识)
持久化状态:内存中的对象在数据库中有与之对应的记录,并且

对象纳入session管理,此时o的任何变化都会自动的发出sql语句

,也就是说对像和数据库是实时联动;
脱管状态:内存中的对象在数据库中有与之对应的记录,但是对

象没有纳入session管理,那么此时o的任何变化都不会发出sql语

句,也就是说o和r没有联动
2.对对象设置了持久化标识,此时由于此标识在数据库中已经存

在,则user变为脱管状态
user.setId(1);
3.由于这个数据库设置主键自动递增,所以不能setId()使他save

一个没建立的记录
4.在get()方法执行时,首先搜索缓存中是否存在持久化标识为这

个的对象,如果存在则直接从缓存中获此对象,否则立即发送sql

语句进行查询
5.session.delete(user)之后,数据库中没有此记录,所以变为

瞬时对象
6.瞬时状态变为持久化状态方法:save(),load(),get()
脱管状态变为持久化方法:update(),load(),get()
7,不能有两个相同持久化标识对象存在,因为主键冲突
//脱管状态
user1.setId(10);
user1.setUsername("shazi");
//脱管状态
user2.setId(10);
user2.setUsername("baichi");
session.update(user1);//脱管状态变为持久化状态,
session.update(user2);//造成主键冲突
然而最后两条语句可以变为:
session.merge(user1);//不会改变状态,不会从脱管状态变为持

久化状态
session.merge(user2);
8.session-factory用于给客户提供数据库连接
9.hibernate-mapping中package (可选): 指定一个包前缀,如果

在映射文档中没有指定全限定的类名, 就使用这个作为包名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值