028_CoreAPI_对象三种状态

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。

猜你喜欢

转载自yuzhouxiner.iteye.com/blog/2268600
今日推荐