`
crabdave
  • 浏览: 1294727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 脏数据(session.isDirty())

阅读更多

Hibernate 脏数据(session.isDirty())

 

      持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏(dirty)对象。

 

java代码片断如下:

	public void sessionDirtyTest(){
		User user=new User();
		user.setUserid(new BigDecimal(1));               
		user.setLoginName("crabdave");        
		user.setUsername("David");         
		user.setPassword("David");         
		user.setSex("male");               
		user.setFixPhone("123456");        
		user.setMobilePhone("1234567890"); 
		user.setDeleteFlag("1");           
		user.setStatus("1");               
		user.setAge("27");                 
		user.setContract("1");             
		user.setDepartment("dept");        

		ApplicationContext ac = new FileSystemXmlApplicationContext("D:/PracticeWorkSpace/SSHPractice/src/main/resources/struts_1_spring.xml"); 
		SessionFactory sessionFactory = ((HibernateTemplate)ac.getBean("hibernateTemplate")).getSessionFactory();
		Session session=sessionFactory.openSession();
		System.out.println("1.session.isDirty():"+session.isDirty());
		Transaction tx=session.beginTransaction();
		System.out.println("2.session.isDirty():"+session.isDirty());
		tx.begin();
		System.out.println("3.session.isDirty():"+session.isDirty());
		session.update(user);
		System.out.println("4.session.isDirty():"+session.isDirty());
		tx.commit();
		System.out.println("5.session.isDirty():"+session.isDirty());
		session.close();
		System.out.println("6.session.isDirty():"+session.isDirty());
	}

 

运行结果如下:

1.session.isDirty():false
2.session.isDirty():false
3.session.isDirty():false
4.session.isDirty():true
Hibernate: update user set loginName=?, username=?, password=?, sex=?, fixPhone=?, mobilePhone=?, deleteFlag=?, status=?, age=?, contract=?, department=? where userid=?
5.session.isDirty():false
Exception in thread "main" org.hibernate.SessionException: Session is closed!

分享到:
评论

相关推荐

    hibernate的session.flush

    `Session.flush()`方法是一个关键的操作,它强制Hibernate将内存中的对象状态同步到数据库,确保数据的一致性。这篇博客深入探讨了`Session.flush()`的工作原理和应用场景。 `Session`在Hibernate中主要有以下职责...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    SessionFactory由Configuration实例创建,配置文件通常为`hibernate.cfg.xml`,其中包含了数据库连接信息、实体类映射等设置。 接下来,我们可以通过SessionFactory获取Session实例。然后,可以使用Session的`save...

    Hibernate配置数据源.

    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect ``` 这种方式不仅使得配置更加灵活,也便于后期维护和调整。 ##### 3. 利用现有的容器管理的数据源 在一些企业级应用中,可能会...

    hibernate入门 数据查询.doc

    - 配置文件`hibernate.cfg.xml`用于设置数据库连接和其他配置,需确保正确配置。 - `SessionFactory`是线程不安全的,通常在应用启动时创建一次,然后在整个应用生命周期中复用。 - 记得在完成数据库操作后关闭`...

    JavaEE技术-自主学习.zip_hibernate_hibernate session _javaee映射.xml

    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb <property name="hibernate.connection.username">root <property name="hibernate.connection.password">password <!-- ...其他...

    hibernate.cfg.xml

    hibernate.cfg.xml hibernate框架的配置文件

    hibernate3全部jar包:hibernate3.jar.zip 下载

    使用Hibernate3时,开发者首先需要配置Hibernate的XML配置文件(通常是hibernate.cfg.xml),其中包含了数据库连接信息、方言设置、缓存策略等。然后,通过SessionFactory创建Session对象,Session是与数据库交互的...

    hibernate-core-5.0.11.Final.jar

    - `Configuration`类:负责读取和解析hibernate.cfg.xml配置文件,生成SessionFactory实例。 - `SessionFactoryImpl`:实际的SessionFactory实现,包含Session的创建逻辑和缓存管理。 - `SessionImpl`:Session的...

    Hibernate-nosession

    然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    使用`SessionFactory.getCurrentSession()`,Hibernate会尝试绑定Session到当前的JTA(Java Transaction API)事务。这意味着如果当前存在一个活动的事务,那么返回的Session将参与这个事务。这种方法的优点在于它...

    Hibernate的MySql查询.rar

    这种映射主要由Hibernate的配置文件(hibernate.cfg.xml)和实体类(Entity Class)来实现。 在MySQL查询方面,Hibernate提供了多种查询方式,包括HQL(Hibernate Query Language)和Criteria API。HQL是Hibernate...

    hibernate 2 安装手记.rar

    Hibernate 2是Hibernate系列的早期版本,它提供了一种模型化关系数据为面向对象的方式,使得开发者可以使用Java对象来处理数据库操作,而无需过多关注SQL语法。这降低了数据库操作的复杂性,提高了开发效率。 2. *...

    Hibernate API Documentation 3.3.0.SP1

    1. Session:这是Hibernate的核心接口,代表了与数据库的一次会话。Session负责对象的持久化,提供了增删查改(CRUD)操作,并支持事务管理。 2. Transaction:在Hibernate中,Transaction接口处理事务边界,确保...

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    HibernateAPI中文版.chm

    3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...

    hibernate--5.Hibernate配置文件详解-2

    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory <property name="jta.UserTransaction">java:comp/UserTransaction ``` 如果你的环境不支持JTA或者更倾向...

    hibernate3.zip 包含hibernate3.jar

    二级缓存则是在多个`Session`间共享的,可以提高数据读取效率,但需谨慎使用以防止数据一致性问题。 8. **持久化类和映射文件**:持久化类是与数据库表对应的Java类,通常包含一些特定的注解或XML映射文件...

    hibernate事务管理机制.doc

    Hibernate官方推荐使用`version`方式,因为它在对象离开Session后还能有效防止并发问题。 在实际应用中,悲观锁适用于高并发但数据冲突可能性大的场景,它可以有效避免并发问题,但可能降低并发性能。而乐观锁适用...

    Hibernate_day01.zip

    3. **缓存配置**:可以选择使用一级缓存(SessionFactory级别的)和二级缓存(例如,使用Ehcache),通过`<property name="hibernate.cache.region.factory_class">`指定缓存提供者。 4. **日志配置**:通过`...

Global site tag (gtag.js) - Google Analytics