`

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。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论
1 楼 落叶留步 2016-01-06  
3.Detached    内存有,缓存没有,数据库有(但是和内存对象没有连接到一起),有id。

内存中没有,缓存没有,数据库有。就是hibernate的session还没有管理这个对象。

另外:
  学hibernate是自毁前途。早日回头。

相关推荐

    HGE_系列教材(1-9)

    源组(resource groups)采用预先缓存和特殊的清除处理(这是一种通过控制对象分配 和释放来提高效率的方法) <5> GUI:强大而灵活的GUI 管理,支持动画式的GUI <6> 矢量(Vectors),对于2D 矢量的完全支持 3)...

    aliyun-python-sdk-core-feedstock:用于aliyun-python-sdk-core的conda-smithy存储库

    关于aliyun-python-sdk-core 主页: : 软件包许可证:Apache-2.0 原料许可证: 简介:阿里云Python SDK的核心模块。 阿里云Python软件开发工具包(SDK)允许您访问阿里云服务,例如弹性计算服务(ECS),对象存储...

    stoxy:Stoxy是带有Web组件的状态管理API,易于使用

    :card_index_dividers: 斯托克Stoxy是配备有Web组件的状态管理API。 Stoxy允许您轻松处理,持久化和更新DOM中的数据,而无需框架的负担。 :open_book: 官方文档官方文档可以在找到 :red_question_mark: 如何Stoxy...

    ZendFramework中文文档

    4.3.1. Zend_Cache_Core 4.3.1.1. 简介 4.3.1.2. 可用选项 4.3.1.3. 例子 4.3.2. Zend_Cache_Frontend_Output 4.3.2.1. 简介 4.3.2.2. 可用的选项 4.3.2.3. 例子 4.3.3. Zend_Cache_Frontend_Function 4.3....

    Oracle9i的init.ora参数中文说明

    说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交之前更新任何对象读取。这种操作模式提供可重复的读取, 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | ...

    Squid中文权威指南

    8.8 哪种最适合我? 第9章 Cache拦截 9.1 它如何工作? 9.2 为何要(或不要)拦截? 9.3 网络设备 9.3.1 内置Squid 9.3.2 四层交换 9.3.3 Cisco策略路由 9.3.4 Web Cache Coordination协议 9.4 操作...

    huaweicloud-sdk-java-obs:用于Java的OBS SDK,用于访问对象存储服务

    将log4j-api 2.12.0替换为log4j-api 2.13.2。 版本3.20.3的新功能: 支持请求者付款。 删除默认的log4j配置。 版本3.20.1第三方依赖性: 用okhttp 3.14.2替换okhttp 3.11.0。 版本3.19.11的新功能: 请求...

    drbx-js:一个(非官方的)dropbox.js的promise包装器

    drbx-js 一个(非官方的)dropbox.js的promise包装器 项目目标 最常用功能的承诺 与browserify的兼容性 少咖啡 modifiedDropboxBuild ...以下功能具有与Dropbox Core HTTP API匹配的参数和(un)official d

    jsr80 java 访问 usb

    尽管 usb.core.Host 对象的实现对于不同的操作系统是不同的,但是 Java 程序员只需要理解 usb.core 包就可以用 jUSB API 开始应用程序的开发。表 1 列出了 usb.core 的接口和类,Java 程序员应该熟悉它们: 表 1. ...

    teslaapi-net:.NET特斯拉API浮出水面

    它为.NET Core和桌面应用程序提供了一种简便的方法来检索状态并将命令发送到Tesla车辆。 获取图书馆 您可以克隆此存储库并从源代码进行构建,也可以使用NuGet将其安装到.NET应用程序中。 Install-Package Julmar....

    web-audio-instrumentation:Web Audio API 中的乐器函数

    检测 Web Audio API 中的方法并为所有状态活动发出事件。 注意事项 该库需要维护在上下文中创建的 AudioNode 的内部可迭代列表。 这意味着所有节点都被强持有,并且永远不会被垃圾回收。 对于复杂的应用程序显然是...

    CFRunLoop源码

    CFRunLoopRef是在CoreFoundation框架呢,是纯C函数的API,是线程安全的 NSRunLoop是基于CFRunLoopRef的封装,不是线程安全 CFRunLoopRef的线程安全性:CFRunLoopRef不是在线程刚创建的时候创建的,而是在线程获取的...

    core-functions:用于处理NodeJavaScript原语和内置对象的核心功能和实用程序,例如字符串,函数,布尔值,Promises,base64等

    app-errors.js-标准API相关的应用程序AppError子类的集合,用于更常用的HTTP状态代码 arrays.js-阵列实用程序 base64.js-用于从UTF-8到Base64进行编码的工具,反之亦然 booleans.js-布尔实用程序 copying.js-对象...

    java面试宝典

    coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否...

    LogAnalytics.Client:一个.NET Core客户端,用于将日志和实体发送到Azure Log Analytics。 基于Log Analytics Data Collector API

    .NET Core的LogAnalytics客户端 从您的应用程序将日志发送到Azure Log Analytics的最简单方法。 构造一个自定义对象,并将其发送到Log Analytics。 它将在日志中表示为日志条目。 这有助于简化应用程序中的日志记录...

    NodeCanvas 3.1.8.rar

    ● 所有三种图形模块之间的无缝子图形嵌套。 (行为子树、子状态机、子对话树) ● 完整的子图变量参数化和贴图。 ● 模块化动作和条件任务设计。 ● 条件反应行为树评估。 ● 有条件和基于栈的 FSM 过渡。 ● 丰富...

    jboss as 7 support jsf2.2.1 modules

    在Facelet页中,pass-through属性可以通过以下三种方法设置: 1. 通过组件标签的命名空间属性 xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://java.sun.com/jsf/passthrough"> 2. 通过...

    frea-core:frea系列中使用的可重用代码

    您将获得一个包含服务器状态的JSON对象。 /live :如果服务器处于/live返回200 。 /ready :如果服务器已准备就绪,则返回200 。 在制品。 API /api :通过调用addModule(modSchema, modInstance) ,您可以根据...

    states:Clojure 中状态计算的基于属性的生成测试

    状态Clojure 中状态计算的基于属性的生成测试。示例: java.util.Set 在这个例子中,我们将指定与实现Set接口的对象的交互。 让我们从需要必要的命名空间开始。 ( require '[clojure.test.check :refer [quick-check...

Global site tag (gtag.js) - Google Analytics