首页 > Windows开发 > 详细

028_CoreAPI_对象三种状态

时间:2016-01-06 02:05:58      阅读:513      评论:0      收藏:0      [点我收藏+]

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。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

028_CoreAPI_对象三种状态

原文:http://yuzhouxiner.iteye.com/blog/2268600

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!