Hibernate框架学习_对象状态

分类

对象状态分为三种:瞬时状态,持久化状态,游离|托管状态

瞬时状态

没有与数据库中对应的id,没有session关联.

持久化状态

有与数据库中对应的id,有session关联

游离|托管状态

有与数据库中对应的id,没有session关联

问:这里假如我们new了一个对象,然后指定了id,那是瞬时状态还是游离状态呢?

首先,我们应该确认id是不是与数据库对应,如果数据库中的id是1,而指定的id是2,则是瞬时状态,如果是与数据库中对应的id则是游离状态

使用以下的test类来说明:

public void func1(){
//		读取配置
		Configuration conf = new Configuration().configure();
//		创建session
		SessionFactory sessionFactory = conf.buildSessionFactory();
//		获得事务操作对象,进行CUDR
		Session session = sessionFactory.openSession();
//		控制事务
		Transaction tx = session.beginTransaction();
		//-----------------------
//		创建一个实体类,没有id,没有关联session(瞬时状态)
		Customer c = new Customer();
//		为实体类属性添加值,没有id,没有关联session(瞬时状态)
		c.setCust_name("刘先生");
//		将实体类与session关联,并通过insert语句添加了id(持久化状态)
		session.save(c);
		tx.commit();
//		-----------------------
//		session关闭,持久化的实体类与session失去关联,但是有id(游离状态)
		session.close();
		sessionFactory.close();
		
	}

通过,以上可知.CUDR的C(增加)是将数据从瞬时状态转化为持久化状态,而当close()方法的执行时,由持久化转为游离状态.

那么,如何从游离状态变为持久化状态呢?持久化状态转为瞬时状态呢?看下图!

上图,为CURD都说明了功能,也可以说,我们数据库操作的目的主要就是为了数据持久化.

另外,hibernate为我们提供了saveOrUpdate()方法,无脑将对象持久化

发布了94 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38827988/article/details/89890807
今日推荐