`
王树雄
  • 浏览: 242458 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 之对象的三种状态以及两种创建session的方法

 
阅读更多

 

 

 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=0value代表对象的引用。这样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

后面两个不用,而第一个和第二个我们用的。

Jtajava transaction  api  的简称 用于分布式系统的

 

1
0
分享到:
评论

相关推荐

    Hibernate中对象的三种状态

    Hibernate提供两种查询语言,一是面向对象的Hibernate Query Language(HQL),二是Criteria API。两者都允许开发者以面向对象的方式执行数据库查询,简化了SQL的使用,使得代码更易维护。 7. 持久化类的设计: ...

    Hibernate_Session_Transaction

    - **查询执行**:查询时,`Session`会清理缓存,以确保查询结果反映最新的对象状态。 - **显式调用`flush()`**:程序员可以手动调用`flush()`方法强制清理缓存。 - **使用native生成器**:在某些情况下,如使用...

    Hibernate 操纵持久化对象

    Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...

    hibernate session详细方法,值得珍藏

    在Java持久化领域,Hibernate无疑占据了举足轻重的地位,而`Hibernate Session`则是其中的核心组件之一,它提供了与数据库交互的主要接口,是对象/关系映射(ORM)的关键部分。本文将深入探讨Hibernate Session的...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...

    域对象在持久化层的状态

    每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库交互策略。 1. **临时状态**:对象刚被创建但尚未与任何持久化会话(Session)关联时所处的状态。这种状态...

    精通hibernate源码ch5

    总结,Hibernate对象持久化技术是Java开发中的重要技能,通过Chapter5的学习,我们可以掌握Hibernate的核心机制,提升开发效率,并为解决实际问题提供理论基础。深入理解源码,不仅有助于我们更好地利用Hibernate,...

    精通Hibernate:对象持久化技术第二版part3

    处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...

    hibernate3.2 jar包

    5. **Querying**:Hibernate支持两种查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似于SQL但更加面向对象。Criteria API则提供了一种动态构建查询的方式,更适合在运行时...

    hibernate-core 核心jar包

    4. **对象状态**:Hibernate将对象分为瞬时(Transient)、持久化(Persistent)、游离(Detached)三种状态。理解这些状态对于有效使用Hibernate至关重要,例如,当对象由Session管理时,其状态变化会影响到数据库...

    hibernate源码

    Hibernate提供两种高级查询语言:HQL(Hibernate Query Language)和Criteria API。HQL类似于SQL,但面向对象,允许开发者以类和属性的方式进行查询。Criteria API则提供了更动态、更面向对象的查询方式,适用于运行...

    1对象持久化与hibernate基础共48页.pdf.zi

    2. Transaction:Hibernate支持JTA和JDBC两种事务管理方式,用于保证数据库操作的一致性。 3. Criteria查询和HQL(Hibernate Query Language):这两者是Hibernate提供的查询语言,允许开发者以面向对象的方式进行...

    hibernate整理

    3. **修改(Update)**:更新对象的状态后,调用`Session.update()`或`Session.saveOrUpdate()`方法,Hibernate会自动检测对象的变化并同步到数据库。例如,更新用户信息后,`session.update(user)`会将变更保存到...

    hibernate源码release-4.1.4.Final版

    1. SessionFactory:它是Hibernate的核心,负责管理所有实体类的元数据,并创建Session对象。SessionFactory的创建是昂贵的,通常在应用程序启动时一次性创建并缓存。 2. Session:是与数据库交互的接口,提供持久...

    hibernate培训第三天

    hibernate支持JDBC和JTA两种事务管理方式。使用Transaction接口,可以开始、提交和回滚事务。事务的隔离级别和传播行为也是需要了解的重点,它们影响到并发操作的安全性。 **四、HQL与 Criteria 查询** hibernate...

    Hibernate Core 3.3.2.GA Javadocs

    8. **状态转换**:Hibernate对象有三种状态:瞬时态、持久态和脱管态。理解这些状态及其转换规则对于正确使用Hibernate至关重要。 通过深入学习和理解《Hibernate Core 3.3.2.GA Javadocs》,开发者能够更好地掌握...

    《深入浅出Hibernate》.pdf

    Hibernate提供了两种查询方式:HQL(Hibernate Query Language)和Criteria API。HQL是面向对象的查询语言,类似于SQL但操作对象而非表。Criteria API提供了一种更面向对象的方式来构建查询,更加灵活且类型安全。 ...

Global site tag (gtag.js) - Google Analytics