Hibernate对象有三种状态:

瞬时状态(Transient):对象新创建的时候,失去引用时被JVM回收; 可通过save方法进入持久状态

持久状态(Persistent):通过save方法之后进入持久状态,在数据库与缓存中有记录; session关闭进入脱管状态

脱管状态(Detached):在数据库中有记录,缓存中没有; 可通过load,get,或查询再次进入持久状态;或者当本session关闭后,重新打开一session,并调用update方法使对象进入持久状态。

对象状态变化图:

Hibernate对象状态Hibernate对象状态

示例:

public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			List list = session.createQuery("select s from Student s where s.id=3").list();
			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				Student object = (Student) iterator.next();
				System.out.println(object.getName());
				object.setName("yeyeyeye");
				
			}
			session.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
	public void testQuery4() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Student s = (Student)session.load(Student.class, 3);
			System.out.println("从数据库load>>>" + s.getName());
			s.setName("444");
			System.out.println("load完后进入持久状态,调用setName方法,更新数据库>>>" + s.getName());
			session.getTransaction().commit();
			
			session.beginTransaction();
			session.update(s);
			s.setName("yyyy");
			System.out.println("在另一个session中利用update方法再次使对象进入持久状态,并调用setName方法,更新数据库>>>" + s.getName());
			session.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

 

第一个示例通过查询使对象进入持久状态,更调用setName进行更新。注意这里更新可以不调用update方法的。

相关文章:

  • 2021-12-23
  • 2022-02-23
  • 2021-06-30
  • 2021-12-23
  • 2021-12-05
  • 2021-07-19
  • 2021-07-31
  • 2021-12-09
猜你喜欢
  • 2021-06-01
  • 2022-12-23
  • 2021-10-24
  • 2021-08-24
相关资源
相似解决方案