`
王树雄
  • 浏览: 239317 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 之对象的三种状态以及两种创建session的方法

 
阅读更多

 

 

 Hibernate对象的的三种状态。

 

Transient :游离态

 

Persistent :持久化

 

Detached  :托管态

 

Configuration con = new AnnotationConfiguration();
		SessionFactory sf = con.configure().buildSessionFactory();
		Session session =null;
		session =sf.getCurrentSession();
		session.beginTransaction();
		Teacher t = new Teacher();
        t.setName("wsx");
		t.setSalary(Salary.a.getValue());
		t.setTitle("teacher");
	
		session.save(t);
		session.getTransaction().commit();
		sf.close();

 

 

 

我们先说明三个空间存储区域。

 

1.内存  2.缓存  3.数据库

 

new一个对象的时候,我们的对象只在内存中占用一份空间。而在缓存和数据里面是没有相关映射数据的。

 

 

此时的这种状态也就是游离的。也就是transient状态。

 

当我们执行到save方法的时候,此时。我们新创建的这个对象的相关信息,也就是这个对象本身存储到数据库里面了。而且在缓存里面也是有一份的。

我们这儿对缓存做一些必要的说明:

 

首先缓存是内存中的一片区域,这片区域。目的是为了提高访问效率。因为每次从数据库里面获取数据是一件非常耗时的事情。这样如果把我们需要的数据临时放到内存里面。那么我们的读取效率将是非常的高。

 

在此中情况下,我们的缓存其实里面存放的是一个session对象。这个对象里面是一个hashmap

这个map有一个key和一个value值。key代表 对象的id值。也就是在数据库里面主键的值。就拿上面的例子来说,当我们save之后,再获取对象的id值的时候。我们可以得到此时对象的id值。而在save之前。对象的id是没有值的,而是默认的id=0value代表对象的引用。这样save之后。我们数据库里面还有缓存session里面以及对象本身都是有id的。而当我们close session之后,那么此时的情况是我们的对象本身和数据库里面都是由id值的。而我们的session里面是没有id的。这是因为session关闭了。对象是和数据库没有关系了的。这样也就是说对象是托管了的。

 

 

 

sessionfactory创建session的两种方法

 

SessionFactory.openSession  SessionFactory.getCurrentSession()

 

 

前者总是打开,后者是单例实现的。在未提交前不管得到多少当前session都是同一个,一旦提交就会变成一个新的session

 

 

如果是openSession那么每次需要手动的进行关闭close。而如果是CurrentSession。那么我们在每次提交完成后则自动关闭。

 

<property name="current_session_context_class">thread</property>

 

如果要是使用CurrentSession的话,那么我们必须要设置上面这行,根据参考。这个里面含有四个值

第一个是jta,第二个是thread,第三个manager,第四个custom.class

后面两个不用,而第一个和第二个我们用的。

Jtajava transaction  api  的简称 用于分布式系统的

 

1
0
分享到:
评论

相关推荐

    精通hibernate:对象持久化技术孙卫琴第二版part2

    处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...

    精通Hibernate:对象持久化技术第二版part3

    处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...

    Hibernate+中文文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改...

    HibernateAPI中文版.chm

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改...

    hibernate3.2中文文档(chm格式)

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改...

    Hibernate中文详细学习文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改...

    Hibernate 中文 html 帮助文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)...

    hibernate 体系结构与配置 参考文档(html)

    Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量...

    最全Hibernate 参考文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)...

    Hibernate教程

    11.1. Hibernate对象状态(object states) 11.2. 使对象持久化 11.3. 装载对象 11.4. 查询 11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 11.4.1.3. 标量...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的查询 10.5. 修改...

    Hibernate3+中文参考文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)...

    hibernate3.04中文文档.chm

    11.1. Hibernate对象状态(object states) 11.2. 使对象持久化 11.3. 装载对象 11.4. 查询 11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 11.4.1.3. 标量...

    Hibernate参考文档

    10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4.1.3. 标量(Scalar)...

    hibernate 框架详解

    Hibernate对象状态(object states) 11.2. 使对象持久化 11.3. 装载对象 11.4. 查询 11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 11.4.1.3. 标量...

    从J2SE到J2EE知识点介绍

    2. 两种实现方式 81 3. 生命周期及状态转换 84 4. 线程调度 85 5. 线程同步 92 三. Jsp 101 (一) myeclipse上配置Tomcat服务器 101 (二) Jsp+servlet+bean版HelloWorld概览 105 (三) Jsp基本页面标签 116 1. 标签 ...

    Spring面试题

    spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP? 面向切面编程(AOP)完善spring的...

    java面试宝典

    一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时如何解决中文问题?如何解析? 48 203、编程用...

    Java语言基础下载

    创建线程的两种方式 179 线程的控制 180 实例分析 182 内容总结 189 独立实践 190 第十二章:高级I/O流 192 学习目标 192 I/O基础知识 193 字节流 193 字符流 194 节点流 194 过程流 194 基本字符流类 198 对象串行...

    java面试题

    答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件...

Global site tag (gtag.js) - Google Analytics