`

hibernate的对象状态

 
阅读更多

在hibernate中将对象大致分为四类:

1、临时状态:它指的是对象已经创建了,但是没有引用,在数据库中没有对应的对象。例子如下:在下面的例子是打印不出sql语句的。

@Test
	public void test_demo1() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		User user = new User();//这里就是临时状态
		user.setName("张三");//临时状态
		tr.commit();
		session.close();
	}

 2、游离状态:它指的是数据库中有对用关系,但是不在session管理范围之外(也就是不受session管理),例子如下:

@Test
	public void test_demo2() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		User user = (User) session.get(User.class, 7);//持久化状态
		user.setName("赵武");
		session.flush();//强制执行
		session.clear();//游离状态
		System.out.println("____________-----");
		tr.commit();
		session.close();
	}

 这里需要理解flush()方法,它代表强制执行,因为在更新操作中,更新是在commit();的时候才更新到数据库,当你对此对象运行了一次更新,在运行时就不会有更新,这个例子放在下面的的一段代码中,再看clear(),执行了它之后就将对象变为了游离状态,它的意思是晴空所有对象。

@Test
	public void test_demo2() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		User user = (User) session.get(User.class, 8);//持久化状态
		user.setName("赵武");
		//session.flush();//强制执行
		//session.clear();//游离状态
		tr.commit();
		session.close();
	}

 3、持久化状态:它的意思就是将对象在session的管理之中,与数据对应着一定的关系,有主键(OID)。在操作的方法主要有,save() ,update(),saveOrUpdate()。例子如下:

@Test
	public void test_add() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		User user = new User();// 临时状态
		user.setName("zhang");// 临时状态
		System.out.println("-----------");
		session.save(user);// 持久化状态
		user.setName("李四");//这里继续会执行
		System.out.println("=============");
		transaction.commit();
		session.close();
	}

 上面代码的user.setName("李四");在save()方法之后,但是它还会执行,执行顺是,先执行保存,打印了保存语句,在执行,修改语句,语句如下所示:

-----------
Hibernate: 
    insert 
    into
        sys_methed
        (name) 
    values
        (?)
=============
Hibernate: 
    update
        sys_methed 
    set
        name=? 
    where
        id=?

 4、删除状态:也就是执行了delete方法之后。打印删除的sql语句。但是要保证删除的id存在(一般是根据主键删除)。如果不存在就抛出异常,删除可以操作的状态有游离状态和持久化状态。删除两种状态的代码和sql语句如下:

 

@Test
	public void test_delete() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		User user = (User) session.get(User.class, 8);//持久化状态
		session.delete(user);
		tr.commit();
		session.close();
	}
 
Hibernate: 
    select
        user0_.id as id0_0_,
        user0_.name as name0_0_ 
    from
        sys_methed user0_ 
    where
        user0_.id=?
Hibernate: 
    delete 
    from
        sys_methed 
    where
        id=?
上面先执行了查询,在执行了删除

 

@Test
	public void test_delete1() throws Exception {
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		User user = new User();//游离状态
		user.setId(3);//这里的id一定要在数据库中查找,不存在会报异常
		session.delete(user);
		tr.commit();
		session.close();
	}

 

Hibernate: 
    delete 
    from
        sys_methed 
    where
        id=?

 注意:这里只有一条sql语句。

分享到:
评论

相关推荐

    Hibernate对象状态以及各种保存方法的区别

    Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。

    Hibernate 对象的三种状态和特点

    在Java的持久化框架Hibernate中...正确管理对象状态可以帮助优化数据库交互,减少不必要的查询,提高系统的整体性能。在实际开发中,开发者需要根据业务需求和性能考虑,灵活运用这些状态,确保数据的一致性和完整性。

    Java面试题57.hibernate对象状态及其转换.mp4

    Java面试题57.hibernate对象状态及其转换.mp4

    57.hibernate对象状态及其转换.avi

    java工程师

    浅谈Hibernate对象状态之间的神奇转换

    Hibernate 对象状态之间的神奇转换 Hibernate 框架中对象状态之间的转换是非常重要的概念,它们之间的转换关系非常复杂。本文将详细介绍 Hibernate 对象状态之间的神奇转换,包括瞬时态、持久态、脱管态 ثلاث种...

    Hibernate对象

    在处理大量数据或复杂的业务逻辑时,正确地使用Hibernate对象状态可以极大地提高效率和性能。例如,当处理大量对象时,可以先将对象设置为游离状态,待所有更改完成后再一次性提交,以减少数据库事务的频繁交互。

    hibernate+状态详解

    理解Hibernate对象状态对于优化应用性能至关重要,例如,正确地管理Session的生命周期可以减少不必要的数据库交互,提高效率。在处理大量数据时,避免在事务中保留大量持久态对象,可以防止内存溢出。而合理使用脱管...

    hibernate对象三种状态

    在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    北大青鸟Hibernate学习资料

    同时,文档《Hibernate对象状态及一对多关联.doc》详细介绍了如何设置和管理一对多关联,这种关联在企业级应用中非常常见,例如一个用户可以有多个订单。 2. **一对一和多对多关联** 在《Hiberate一对一和多对多...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session关联。对象的状态和数据库中的记录可能不一致。 2. 瞬时态(Transient):对象刚被创建,与Session关联,但尚未持久化到...

    Hibernate 对象的状态检索

    本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式

    Hibernate对象持久化状态

    在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库...同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。

    hibernate-5.2.10最新jar包

    4. Hibernate对象状态: Hibernate将对象分为四种状态:瞬时态、持久态、托管态和游离态,理解这些状态对于正确使用Hibernate至关重要。 5. Hibernate映射机制: 使用XML或注解来定义对象和表之间的映射关系,...

    传智播客hibernate源码.rar

    五、Hibernate对象状态 Hibernate将对象分为四种状态:瞬时态、持久态、托管态和脱管态。理解这些状态及其转换对于正确使用Hibernate至关重要。 六、查询语言HQL与 Criteria API HQL(Hibernate Query Language)是...

    hibernate面试题.doc

    3. Hibernate对象状态: Hibernate中的对象有三种状态: - **瞬时态(Transient)**:对象在内存中创建,但尚未与数据库关联。使用`session.save()`或`saveOrUpdate()`方法可以将瞬时对象转化为持久态。 - **持久态...

    Hibernate中对象的三种状态

    Session提供了事务管理和缓存功能,确保了对象状态的正确管理。例如,一级缓存(First Level Cache)自动管理持久态对象,而二级缓存(Second Level Cache)则可跨Session共享数据,提高性能。 6. HQL与 Criteria ...

    hibernate4.1中文api

    - **Hibernate对象状态**: 介绍了瞬态、持久、游离等状态。 - **使对象持久**: 如何将对象变为持久状态。 - **加载一个对象**: 使用不同的方法加载持久化对象。 - **查询**: 使用HQL或其他查询语言执行复杂查询。

    hibernate3.2生命周期

    Hibernate对象状态 对象在Hibernate中有以下几种状态: - **瞬时态(Transient)**:对象刚刚被创建,还没有与Session关联,没有持久化标识符(ID)。如果对象在这个状态下被垃圾回收,那么所有关于该对象的数据...

Global site tag (gtag.js) - Google Analytics