hibernate中对象由自由转为持久状态的问题
问这个问题可能有些...,但是看到网上说的都不一致,所以在这边发个帖子,确定一下。
疑问点是在自由状态转换为持久状态的过程中,
在网上查了下,
有的说执行save或saveOrUpdate方法后,变为持久状态。
但是有的观点说持久状态是需要在session里面有,而且数据库里面也要有。
这样的话就有些矛盾了,如果在save以后,不commit的话,数据库中肯定是不会有数据的。怎么会算做是持久状态呢?
举个笔试题的例子:
(9)对于以下程序,Customer对象在第几行变为持久化状态?(单选)
Customer customer=new Customer(); //line1
customer.setName(\"Tom\"); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
A) line1 B)line2 C)line3 D)line4 E)line5 F)line6
答案却是D,请各位给个正确的答案。谢谢
------解决方案-------------------- 肯定了。 变为持久化状态时有两种:一,和数据库有交互, 二,事物未关闭,再对实体操作 都是改为持久化状态。
------解决方案--------------------我觉得应该是E在line6之后关闭后才成为了游离状态,之前都是持久状态。commeit后就成了游离状态了。
------解决方案--------------------
		try
		{
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			// 临时状态
			user = new User();
			user.setName("李智雅");
			user.setPassword("987654");
			user.setBirthDate(new Date());
			// 持久化状态
			session.save(user);
			user.setName("王新兰");
			tx.commit();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			tx.rollback();
		}
		finally
		{
			HibernateUtils.closeSession(session);
		}
		// 游离状态
		user.setPassword("123456");
		try
		{
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			// 持久化状态
			session.update(user);// 必须显式调用update()
			user.setName("励志哥");
			tx.commit();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			tx.rollback();
		}
		finally
		{
			HibernateUtils.closeSession(session);
		}
	}