日期:2014-05-17  浏览次数:20673 次

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);
}
}