hibernate中对象分为三种状态:瞬时状态,游离状态,持久状态
在此之前必须了解hibernate的缓存概念,在hibernate中用来执行CRUD的对象是Session类的实例,Session本身是具有缓存性质的。通常大家所说的一级缓存就存在于Session之中,你可以将它想象成一个Map里面装了一些要操作的对象。
开始实验:
1.实体类:
public class Student {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. 映射文件:
<hibernate-mapping package="org.zengge.hibernate.pojo">
<class name="Student" table="student" lazy="true">
<id name="username" type="java.lang.String" column="username">
<generator class="native"></generator>
</id>
<property name="password" type="java.lang.String" column="password"></property>
</class>
</hibernate-mapping>
3.hibernate配置文件:
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://192.168.1.103:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="show_sql">true</property>
<mapping resource="org/zengge/hibernate/pojo/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.获取Session及SessionFactory的公共类HibernateUtils
public class HibernateUtils {
public static final SessionFactory sessionFactory = getSessionFactory();
public static SessionFactory getSessionFactory(){
Configuration configuration = new Configuration().configure();
return configuration.buildSessionFactory();
}
public static Session getSession(){
return sessionFactory.getCurrentSession();
}
public void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
4.瞬时对象
瞬时对象,比较简单,它在数据库中不存在,在Session的缓存中也不存在。当JVM关闭时,它就会消失。
可以想象,就是当我们new一个对象出来时,只要这个对象不与数据库中某条记录一致,那么它就是个瞬时对象。
public void TestTransient(){
Student student = new Student();//瞬时对象
}
当此方法调用结束,这个student瞬时对象就消失了。
5.持久对象
持久对象,在数据库中存在,在Session的缓存中也存在。session的save,saveorupdate可以将瞬时对象转换成持久对象。delete方法可以将持久对象转换成瞬时对象。最重要的一点,对持久对象的操作,会自动与数据库中数据同步,
所以对持久对象操作时要小心。
public void Testpersistent(){
Student student = new Student();//瞬时对象
Session session = HibernateUtils.getSession();//获取session
//开启事务
Transaction tr = session.beginTransaction();
session.save(student);
//save后成为持久状态,接下来对student操作,会自动与数据库同步
student.setPassword("skycn");
tr.commit();//在事务提交时,session会将数据写入数据库并清空缓存
session.close();//操作完成,关闭session
}
6.游离对象
游离对象,在数据库中存在,在session的缓存中不存在。
public void Testdetached(){
Session session = HibernateUtils.getSession();
//开启事务
Transaction tr = session.beginTransaction();
Student student = new Student();//它的状态不能确定,可能是瞬时,也可能是游离,
session.save(student);
//save后成为持久状态,接下来对student操作,会自动与数据库同步
student.setPassword("skycn");
tr.commit();//在事务提交时,session会将数据写入数据库并清空缓存
session.close();//操作完成,关闭session
//session关闭,清空缓存,student由持久对象变成游离对象
System.out.println(student.getUsername()+" "+student.getUsername());
}
7.对象之间相互转换的图示
通过不同的方法调用,对象的状态会发生相应的变化。
- 大小: 53.3 KB
分享到:
相关推荐
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
以下是Hibernate对象的三种主要状态及其特点: 1) 临时状态(Transient State): 当通过`new`关键字创建一个新的对象时,该对象处于临时状态。在这个状态下,对象并未与任何Session关联,因此它的变化不会自动反映...
Session提供了事务管理和缓存功能,确保了对象状态的正确管理。例如,一级缓存(First Level Cache)自动管理持久态对象,而二级缓存(Second Level Cache)则可跨Session共享数据,提高性能。 6. HQL与 Criteria ...
hibernate中session对象的状态详解
以下是 Hibernate 中对象的三种状态以及相关的保存方法: 1. **瞬时对象(Transient Objects)** - 当使用 `new` 关键字创建一个对象时,它处于瞬时状态。这种状态的对象与数据库中的任何记录没有关联,只存在于...
在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...
1. Hibernate对象的三种状态: - Transient(瞬态):这是对象的初始状态,对象在内存中独立存在,没有与任何Session关联,也没有持久化标识,即没有与数据库中的记录对应。对瞬态对象的修改不会自动同步到数据库。...
Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...
一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session关联。对象的状态和数据库中的记录可能不一致。 2. 瞬时态(Transient):对象刚被创建,与Session关联,但尚未持久化到...
理解Hibernate的对象状态对于有效地进行数据库操作至关重要。正确管理对象状态可以避免数据丢失、重复插入或其他数据库一致性问题。在开发过程中,应该注意何时创建、保存、更新和删除对象,以及它们与Session的关系...
本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...
### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...
总结来说,理解和掌握实体对象的三种状态以及`saveOrUpdate`方法是优化Hibernate应用的基础。通过深入学习这些概念,开发者能够更有效地处理数据持久化,提高代码的稳定性和可维护性。在实践中,应根据具体需求选择...
2. Hibernate对象的三种状态: -瞬时态(Transient):对象刚刚被创建,尚未与Session关联,也没有持久化到数据库中。如果对象在这个状态下被垃圾收集器回收,那么对象的信息将会丢失。 -持久态(Persistent):...
以下是关于Hibernate中对象的三种状态以及保存方法的详细分析: 1. **对象的三种状态** - **瞬态(Transient)**:对象刚被创建,尚未与任何Session关联,不具备持久化能力。对瞬态对象的修改不会自动同步到数据库...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`new`关键字创建一个实体对象时,它默认处于临时状态。此时,对象未被Hibernate管理,即使对象包含了主键ID,如果...
首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - 当使用`new`关键字创建一个新的Java对象时,该对象是瞬时的。这意味着它们与数据库没有任何关联。如果对象...
在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质(如数据库)的过程。Hibernate通过提供一种对象-关系映射机制,使得Java对象可以直接与数据库表进行交互,而无需编写大量的SQL语句。这种映射机制...
本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式