Hibernate对象状态】的更多相关文章

对象状态 瞬时(transient) 自己new出来的对象,数据库没有记录与之对应,与session也没有关联 持久(persistent) 数据库中有记录与之对应,当前与session有关联,相关的session未关闭,事务未提交 持久对象如果发生改变,Hibernate能够检测到,事务提交的时候会将改变后的数据提交给数据库 脱管(detached,也有翻译成游离) 数据库有记录与之对应,但没有与session关联,托管对象的改变Hibernate无法检测到 使用场景 对瞬时对象进行保存报错…
Class classA{ List a; public void setA(List a) { this.a =a; } public List getA() { return this.a; } } .... classA t;//处于hibernate管理状态下面 List b=new ArraryList<>(); b.add(new Object()); /** 成功 */ t.getA().add(b);//maybe addAll(b) //如果使用t.a=b;则会失败 sess…
状态分类 在Hibernate框架中,为了管理持久化类,Hibernate将其分为了三个状态: 瞬时态(Transient Object) 持久态(Persistent Object) 脱管态(Detached Object) 有很多人好像对这些概念和它们之间的转换不太明白,那么本篇文章就是来解决这些问题的,看完了还不会你来找我.(开个玩笑~~) 详细描述 我们先来详细地了解一下三种状态: 1.瞬时态 对象由new操作符创建,且尚未与Hibernate中的Session关联的对象被认为处于瞬时态…
我的问题出在,删除的对象对应的表中有一个外键,关联着另外一个表,可是另外一个表中没有数据,所以报了这个错误. 参考http://www.cnblogs.com/onlywujun/archive/2013/04/10/3012719.html 如果关联的外键可以为空,这时需要修改配置文件.加上红色的字即可.将not-null='true'去掉 <many-to-one name="post" class="对象" fetch="select"…
lHibernate对象共有三种状态 •瞬时状态:瞬时对象 •持久化状态:持久化对象 •托管状态:托管对象 l瞬时对象(Transient Object),简称TO l瞬时对象指的是应用程序创建出来的对象,并且未受到Hibernate控制,一旦Hibernate控制了该对象,具有了OID,对象就不再是瞬时对象 l持久化对象(Persistent Object),简称PO l持久化对象指的是受Hibernate控制的对象,无论该对象是如何得到的,只要受到Hibernate控制,该对象即为持久化对象…
刚开始学习hibernate时,对其对象的三种状态理解的模模糊糊,一直停留在一知半解的状态,前两天又回顾了一下,顿时醒悟,原来三种状态理解起来是很容易的. 先看一下对Hibernate对象状态的解释:    临时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为临时(Transient)的.临时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier). 如果临时(Transient)对象在程序中没…
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCurrentSession代替openSession ThreadLoacl对象 享元模式 session.update(obj),为保证执行更新,推荐使用session.flush()刷新缓存; 1和2大概总结了Hibernate运行的技术原理,那么现在总结一下它自身的编写过程:如下: 其中本质上主要…
对于hibernate,我想不在这里讲解了,我们就直接进入主题 在这里我将要说的是"hibernate对象的三种状态",对象是我们十分熟悉的,对吧!而对于对象它有三种状态 分别是瞬态,持久态和游离态. 下面让我来分别介绍一下三种状态 第一种:瞬态:表示该实体对象在内存中是自由存在的,也就是说与数据库中的数据没有任何的关联即,该实体从未与任何持久化上下文联系过,没有持久化标识(相当于主键). 瞬态实体的特征有: 与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录 与Sessi…
1.对象状态 1.1   状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录.没有与hibernate关联,与数据库中的记录没有产生关联. OID特点:没有值 持久态:persistent,session缓存对象,数据库最终会有记录.(事务没有提交)与hibernate关联,对象有id OID特点:有值 脱管态:detached,session没有缓存对象,数据库有记录.没有与hibernate关联,对…
在Hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). 1. 临时状态 由 new命令开辟内存空间的java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系. (a) 如 果没有变量对该对象进行引用,它将…
hibernate对象的三种状态: (一) 瞬时(临时)状态:   对象被创建时的状态,数据库里面没有与之对应的记录! (二) 持久状态:   处于session的管理中,并且数据库里面存在与之对应的记录! (三) 游离状态:   对象不处于session的管理中,但是数据库里面存在与之对应的记录! 对象与session产生关系的时机:   1.save()或者saveorupdate(); 2.get()或者load(); 清空缓存:   1.clear();//清空所有加载的实例 2.evi…
1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此对象没有纳入session的管理,此状态的对象不能直接存入数据库(会抛出TransientObjectException). (2)persistent持久态:在数据库中有与之匹配的数据,并且纳入了session的管理(一般就是执行了save.update.load. get后的对象),在提交事务时…
一. Hibernate对象的状态 实体对象的三种状态: 1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关. po在DB中无记录(无副本),po和session无关(手工管理同步) 如:Customer customer = new Customer(): customer.setName("eric"): 这里的customer对象与数据库中的数据没有任何关联 2) 持久态(Persistent)---实体对象处于Hibernate框架的管…
一.Hibernate中的对象状态 1.1.瞬时态(临时态) 没有与Hibernate产生关联 与数据库中的记录没有产生关联(有关联就是与数据库中表的id相对应) 获得:一般都只直接创建(new) 瞬时态 转换 持久态 一般操作:save方法.saveOrUpdate 瞬时态 转换 脱管态 一般操作:通过setId方法设置数据 1.2.持久态 Hibernate有关联 对象有id 获得: 查询操作:get.loat.createQuery.createCriteria 等 获得都是持久态[] 执…
一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的JavaBean,只是要申明遵循一定的规则就是一个PO类. 在Hibernate框架中,采用的面向对象的思想实现数据库的CRUD操作.在数据库中每一个表就有一个对应一个持久化对象.PO类可以看成,与数据库表相映射的Java实体对象.最简单的PO类中的属性对应数据库中表的字段名. //演示如何创建一个po实…
前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对象状态是为了更清晰地知道Hibernate的设计思想,以及是一级缓存的基础-当然啦,也就一点点知识 临时/瞬时状态 当我们直接new出来的对象就是临时/瞬时状态的.. 该对象还没有被持久化[没有保存在数据库中] 不受Session的管理 持久化状态 当保存在数据库中的对象就是持久化状态了 当调用sessi…
hibernate对象的状态分为三种:  游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration   cfg=new Configuration().configure(); SessionFactory sessionFactory=cfg.buildSessionFactory(); Session session=sessionFactory.openSession(); Transaction    tx=session.beginTransaction(); P…
创建一个实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private Stri…
一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转换图 三.hibernate进阶-一级缓存 1.缓存:提高效率.hibernate中的一级缓存也是为了提高操作数据库的效率. 2.提高效率手段1:提高查询效率 3.提高效率手段2:减少不必要的修改语句发送…
1. 持久化实体 Serializable save(Object obj) : 将obj对象变为持久化状态,该对象的属性将被保存到数据库. void persist(Object obj) : 将obj对象转化为持久化状态,该对象的属性将被保存到数据库. Serializable save(Object obj,Object pk)  : 将obj对象保存到数据库,保存到数据库时,指定主键值. void persist(Object obj,Object pk) : 将obj对象转化为持久化状…
一. hibernate的实体类有一定的规则,类似于mybatis的逆向工程导出的实体类.具体的规则以及原因如下: 1.持久化类需要提供无参的构造方法. 因为hibernate底层采用反射机制创建对象,采用class.newInstance()创建对象,此方法默认调用无参构造方法创建对象.如果我们只写一个带参数的构造函数在查询的时候会报错误 org.hibernate.InstantiationException 例如:我们重写一个类的无参构造方法: public class User { pr…
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对象的三种状态,Hibernate对象有三种状态,分别是:临时态(Transient). 持久态(Persistent).游离态(Detached). 临时状态:是指从对象通过new语句创建到被持久化之前的状态,此时对象不在Session的缓存中. 处在此状态的对象具备以下特点: 1,不在Sessio…
一.hibernate对象三种状态 Transient(瞬时状态):没有session管理,同时数据库没有对应记录 举例:new 出来的对象还没有被session管理,此时该对象处于Transient Persistent(持久化状态):有session管理,同时在数据库中有记录 举例:通过get.load等方法获取的数据库中存在的对象,此时处于Persistent Detached(离线状态):没有session管理,但是在数据库中有记录 举例:(1) 当通过get或load方法得到的po对象…
在Hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). 1. 临时状态 由 new命令开辟内存空间的java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系. (a) 如 果没有变量对该对象进行引用,它将…
一.Hibernate中的实体规则 1.实体类创建的注意事项 1)持久化类提供无参数构造,因为在Hibernate的底层需要使用反射生成类的实例. 2)成员变量私有,提供公有的get和set方法,需提供属性(属性规则就是同时存在get和set方法,否则只能叫字段),因为在Hibernate底层会将查询到的数据进行封装. 3)持久化类中的属性应尽量使用包装类型(例如用Long代替long),因为包装类和基本数据类型的默认值不同,包装类的类型语义描述更加清晰而基本数据类型不容易描述(例如考试分数为D…
hibernate里对象有三种状态: 1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值. 2,Persistent 持久:调用了save().saveOrUpdate(),就变成Persistent,有id 3,Detached  脱管 : 当session  close()完之后,变成Detached. 例子程序: Teacher类: package com.oracle.hibernate.id; import javax.persistence.Entity; im…
对象的状态 瞬时状态: 瞬时对象(TO) 应用程序创建出来的对象,不受H3控制 注意:TO对象不具有OID,一旦为TO赋值OID,那么此时就不是TO 持久化状态:持久化对象(PO) 受H3控制的对象,PO一定具有OID 托管状态: 托管对象(DO) 曾经受到H3控制,当前不受H3控制(Session关闭),一定具有OID 给TO赋值OID TO,PO,DO的区别 1.受控(Session) 2.OID对象状态对应的时机 TO new创建的对象并且不携带OID PO save后的对象 update…
摘自 http://blog.csdn.net/csh624366188/article/details/7612142 Hibernate 的Session就是其中的一个,它提供了基本的增,删,改,查方法.而且具有一个缓存机制,能够按照某个时间点,按照缓存中的持久化对象属性的变化来更新数据库,这就是Session的缓存清理过程. 在Hibernate中对象分为三个状态,临时,持久化,游离.如果我们希望JAVA里的一个对象一直存在,就必须有一个变量一直引用着这个对象.当这个变量没了.对象也就被J…
一.hibernate中的实体规则 实体类创建的注意事项 1.持久化类提供无参数构造 2.成员变量私有,提供共有get/set方法访问.需提供属性 3.持久化类中的属性,应尽量使用包装类型 4.持久化类需要提供oid.与数据库中的主键列对应 5.不要用final修饰class 主键类型 自然主键(少见) 表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用. 代理主键(常见) 表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键…
1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Parsistent): 如果对象与Session对象关联起来,且该对象对应到数据库记录,则称该对象处于持久化状态.3.游离状态(Detached) Session被关闭或调用了Session的evict或clear方法把它从Session中移除了,则该对象脱离了Session的管理,持久化状态变成游离…