028_CoreAPI_对象三种状态
星期一, 一月 04, 2016 15:07
上节课问题:
opensession 和getcurrentsession这两种分式不能混用。
两种session拿到的不是同一个。
session是一个接口,拿到的具体的实现类不是一个。
session接口
查下hibernate api文档
在哪里
不在distribution
hibernate官网上找,hibernate api
扒网站
http://blog.sina.com.cn/s/blog_673be8c40100rum3.html
hibernate 3.2api 自己下载
文档里
org.hibernate.session
被JBOSS收购(卖文档)被red hat收购
在学习jdbc的时候要写 try catch finally
存在概念:
1.只用hibernate时,要写try catch finally
2.hibernate在和spring一起使用的时候,不用写try catch finally
讲到spring的时候再说。
看一些接口:
org.hibernate.session
hibernate的几种状态
1.public Serializable save(Object object)
throws HibernateException
Persist the given transient instance, first assigning a generated identifier.
1.将teacher类
进行设置一个id为主键
(原来是联合主键)
2.在测试类中
增加测试类中的三种状态方法
TestSave3Status()
@Test
public void TestSave3Status(){
Teacher t = new Teacher();
//因为id设置的自动生成,所设置不设置是一样的
t.setName("t2");
t.setTitle("ccc");
t.setBirthdate(new Date());
t.setYourWifeName("yourWifeName1");
t.setZhicheng(ZhiCheng.A);
Session session = sf.getCurrentSession();
//在hibernate中执行操作要在一个事务里面
session.beginTransaction();
session.save(t);
System.out.println("-----------");
System.out.println(t.getId());
session.getTransaction().commit();
}
没有手动设置id,在save()后,进行获取t.getId()。
打印结果:
1
对象有三种状态的区别
1.Transient
2.Persistent
3.Detached
基本的解释:
1.基本
Teacher在new后,是Transient。
save()方法,可以把Transient变为Persistent。
2.三种状态的解释:
1.这个对象刚new出来,设了其他值,没有设置id,这个时候称为Transient
2.当你调用了save()或是saveorupdate()后,变为Persistent,这种状态是有id的。
3.把这个session给colse()了,这时候就变成Detached
---------这三种状态还是不好理解的,在三种状态和其他方法混用的时候,n多的细节。
孙卫琴比较老了,annotation没有。这么去学的话,会觉得非常头大。
---------如果这么去学,会不好学;在实际的学习中,
记得这些方法是什么用,在实际工作的时候,实验一下,能用就用,不能用算了。
推荐的方法是实践,不是背。
3.区别主要有两点:
1.有没有id -->Transient
2.在数据库中有没有id
3.在内存里有没有id
4.解释save()方法:
4.1session:
1.session是内存中的一个对象;
2.session里缓存了对象的id,session里面有个map,
map里面有key是id,这value是对象的引用。
4.2缓存:
内存中的一块区域,里面放着可以提高读取效率的引用或者对象
-------提高效率。
4.3由于调用save()方法,用了insert语句,
commit后,调用数据库里有了key这条记录了,内存也有,
id也有,这时候是Persistent。
close了,key这个对象还有,已经脱离了session的管理了,
这时候是Detached。
5.总结:
对象有三种状态的区别
1.Transient 只有内存中一个孤零的对象; 没有 id,缓存没对应的key value,数据库没。
2.Persistent 内存中有,缓存有(是内存中的一部分),数据库有。
3.Detached 内存有,缓存没有,数据库有(但是和内存对象没有连接到一起),有id。