在java中应用程序通过new创建一个java对象时,jvm会为这个对象分配一块内存空间,只要这个对象被应用,就一直处于内存中,如果这个对象不在被任何引用变量引用,java虚拟机会适当时候回收内存,这就是垃圾回收器,java集合里面存放的对象实际上面就是java对象的引用,当我们向对象里面添加或者删除一个对象的时候实际上是把一个引用添加或删除了,在hibernate中session接口是hibernate提供给应用程序的主要接口,提供了主要的一些数据库操作,session具有缓存,位于缓存中的对象处于持久化状态,它和数据库中的相关记录对应。session缓存两大作用,一,减少访问数据库的频率,二,保证缓存中的对象与数据库中的记录同步。位于缓存中的对象叫做持久化对象,
public static void testObject()
{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer customer = new Customer();
customer.setName("elvia");
Order order1=new Order();
order1.setOrdernumber(3);
Order order2=new Order();
order2.setOrdernumber(4);
customer.getOrders().add(order1);
session.getTransaction().commit();
}
public static void testObject2()
{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer customer = new Customer();
customer.setName("elvia");
session.save(customer);//持久化customer对象,同时customer对象被
//加入到缓存中,上面customer为一持久化对象
Long id=customer.getId();//获得customer的id
Customer c2=(Customer)session.load(Customer.class,id);
//重新loadcustomer对象,直接从缓存中取出,而不是访问数据库
session.getTransaction().commit();
session.close();//关闭session,清空缓存
//但是仍然可以访问c2,此时c2处于游离状态
System.out.println(c2.getName());
}
位于session缓存中的持久化对象状态发生了变化,session并不会马上执行相关sql语句,
public static void testObject3()
{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer customer = (Customer)session.load(Customer.class,new Long(1));
customer.setName("11");
customer.setName("22");
session.getTransaction().commit();
},
上面所做的操作,只会执行一句sql语句把name改为22,而不会执行两次update,当session加载了customer对象后,会给customer对象的值类型属性复制一份快照,当session清理缓存时,通过比较customer对象的当前属性与快照,session判断那些属性进行了改变,从而执行相应的update
session会在1 comomit方法的时候,commit方法先清理缓存,然后在向数据库提交事务,当应用程序调用find或者iterator的时候如果缓存中的持久化对象发生了改变则先清理缓存,当应用程序调用flush的时候,flush是清理缓存执行一部分sql操作,但是不会提交事务,而commit是先清理缓存再提交事务,
hibernate中java对象的状态
1临时状态,刚由new来创建,还没有被持久化,不处于session缓存中
2 持久化状态,已经被持久化,加入到session缓存中,处于持久化状态的对象,持久化对象
3 游离状态,已经被持久化,当不再处于sesion缓存中。
session的特定方法促使java对象由一个状态转换为另一个状态
session接口的相关方法
save方法把临时对象转换为持久化对象 save完成以下操作,把customer对象加入到缓存中,使他变成持久化对象,选用映射文件中指定的标识符生成器给持久化对象分配唯一OID,如果希望由应用程序来给customer对象指定oid,可以调用save的重载方法save(customer,new Long(155)),savef并不是立即执行sqlinsert的,而是等到清理缓存的时候,注意无论java处于何种状态,多不应该由应用程序来修改它的oid
public static void testObject4()
{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer c=new Customer();
c.setName("1111");
session.save(c);
/*
Customer c2=new Customer();
session.save(c2);
c2.seName(""222);
*/
session.getTransaction().commit();
}上面两种实现实际上是一个效果,因为只有等到session清理缓存的时候,才执行相应的sql操作
saveOrUpdate方法同时包含save和update方法的功能,如果传人的参数是临时状态则执行save,如果传入的参数是游离对象则执行update方法,如果传入的参数是持久化对象则直接返回,session的load和get方法,区别在于load方法当数据库中不存在Oid的时候抛出异常,get则返回null
delete方法从数据库中删除与java对象对应的记录
对象和对象是相互关联的,再session缓存中存放的是一幅相互关联的对象图,比方说user里面有个属性是company,这样就可以通过user来获得user所在的company的相关信息,同时也可以根据company获得这个company的所有的user的相关信息,<set> <many-to-one> <one-to-one> 多由一个cascade属性,值有none,save-update,delete ,all,delete-orphan,all-delete-orphan
分享到:
相关推荐
hibernate中session对象的状态详解
在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...
在Java的持久化框架Hibernate中,对象的状态是理解其工作原理的关键部分。这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。
Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与Session的关系。 首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - ...
Hibernate对象关系映射一对多 很基础等文档
总结,Hibernate操纵持久化对象涉及多个方面,包括对象状态管理、事务处理、查询机制、缓存策略以及关系映射等。熟练掌握这些概念和操作,将极大地提高开发效率,并有助于构建高效、稳定的数据库应用程序。通过实践...
本文将深入探讨Hibernate中的实体状态及其转换,帮助开发者更好地掌握如何有效地使用Hibernate进行数据操作。 首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`...
这是一个讲解了关于hibernate三种状态之间的转换,如果想知道他们之间的相关总结和理解,这是一个不错的选择
在Hibernate中,对象的状态分为瞬时状态、持久状态和脱管状态。瞬时状态的对象存在于内存中,但未与SessionFactory关联;持久状态的对象已经被持久化到数据库,并且可以通过SessionFactory追踪;脱管状态的对象曾经...
在Hibernate中,每个Java类都可以代表一个数据库表,而类中的属性对应表中的列。通过注解或XML文件,我们可以定义类与表之间的映射关系,如@Table表示表名,@Column表示列名。 四、Session工厂与Session ...
本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...
Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期
在Java的持久化框架Hibernate中,对象的状态管理是其核心功能之一。Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate...
对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
8. **实体生命周期**:详解Hibernate对对象状态的管理,包括瞬时态、持久态、游离态和脱管态,以及对象状态转换和事件监听器。 9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、...
- **定义**:`Session`接口是Hibernate中非常重要的接口之一,它提供了所有用于执行CRUD操作的方法。这里的CRUD指的是Create(创建)、Read(读取)、Update(更新)和Delete(删除)等数据库操作。 - **特性**: -...
在Hibernate中,实体类代表数据库表,实体类的实例对应表中的记录,属性对应字段,这样就将复杂的SQL操作转化为简单的对象操作。 其次,书中详细讲解了Hibernate的配置。这包括了Hibernate的XML配置文件(hibernate...