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=0;value代表对象的引用。这样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
后面两个不用,而第一个和第二个我们用的。
Jta是java transaction api 的简称 用于分布式系统的
分享到:
相关推荐
Hibernate提供两种查询语言,一是面向对象的Hibernate Query Language(HQL),二是Criteria API。两者都允许开发者以面向对象的方式执行数据库查询,简化了SQL的使用,使得代码更易维护。 7. 持久化类的设计: ...
- **查询执行**:查询时,`Session`会清理缓存,以确保查询结果反映最新的对象状态。 - **显式调用`flush()`**:程序员可以手动调用`flush()`方法强制清理缓存。 - **使用native生成器**:在某些情况下,如使用...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
在Java持久化领域,Hibernate无疑占据了举足轻重的地位,而`Hibernate Session`则是其中的核心组件之一,它提供了与数据库交互的主要接口,是对象/关系映射(ORM)的关键部分。本文将深入探讨Hibernate Session的...
处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...
每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库交互策略。 1. **临时状态**:对象刚被创建但尚未与任何持久化会话(Session)关联时所处的状态。这种状态...
总结,Hibernate对象持久化技术是Java开发中的重要技能,通过Chapter5的学习,我们可以掌握Hibernate的核心机制,提升开发效率,并为解决实际问题提供理论基础。深入理解源码,不仅有助于我们更好地利用Hibernate,...
处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...
5. **Querying**:Hibernate支持两种查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似于SQL但更加面向对象。Criteria API则提供了一种动态构建查询的方式,更适合在运行时...
4. **对象状态**:Hibernate将对象分为瞬时(Transient)、持久化(Persistent)、游离(Detached)三种状态。理解这些状态对于有效使用Hibernate至关重要,例如,当对象由Session管理时,其状态变化会影响到数据库...
Hibernate提供两种高级查询语言:HQL(Hibernate Query Language)和Criteria API。HQL类似于SQL,但面向对象,允许开发者以类和属性的方式进行查询。Criteria API则提供了更动态、更面向对象的查询方式,适用于运行...
2. Transaction:Hibernate支持JTA和JDBC两种事务管理方式,用于保证数据库操作的一致性。 3. Criteria查询和HQL(Hibernate Query Language):这两者是Hibernate提供的查询语言,允许开发者以面向对象的方式进行...
3. **修改(Update)**:更新对象的状态后,调用`Session.update()`或`Session.saveOrUpdate()`方法,Hibernate会自动检测对象的变化并同步到数据库。例如,更新用户信息后,`session.update(user)`会将变更保存到...
1. SessionFactory:它是Hibernate的核心,负责管理所有实体类的元数据,并创建Session对象。SessionFactory的创建是昂贵的,通常在应用程序启动时一次性创建并缓存。 2. Session:是与数据库交互的接口,提供持久...
hibernate支持JDBC和JTA两种事务管理方式。使用Transaction接口,可以开始、提交和回滚事务。事务的隔离级别和传播行为也是需要了解的重点,它们影响到并发操作的安全性。 **四、HQL与 Criteria 查询** hibernate...
8. **状态转换**:Hibernate对象有三种状态:瞬时态、持久态和脱管态。理解这些状态及其转换规则对于正确使用Hibernate至关重要。 通过深入学习和理解《Hibernate Core 3.3.2.GA Javadocs》,开发者能够更好地掌握...
Hibernate提供了两种查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似于SQL但操作对象而非表。Criteria API提供了一种更面向对象的方式来构建查询,更加灵活且类型安全。 ...