hibernate 状态

来源:互联网 发布:什么软件开发最有前途 编辑:程序博客网 时间:2024/05/19 01:13
public class AppState {private static SessionFactory sf=null;static{Configuration config=new Configuration();config.configure("cn/itcast/hibernate/state/hibernate.cfg.xml");config.addClass(Customer.class);config.addClass(Order.class);sf=config.buildSessionFactory();}@Testpublic void testState(){Session s=sf.openSession();Transaction ts=s.beginTransaction();/** * 临时对象: *  oid=null *  在数据库中没有对应的记录 *  在session的缓存中没有 */Customer c=new Customer();c.setName("yyyy");/** * s.save(c) *  该对象变为持久对象 *  oid不为null *  session的一级缓存中有该对象 *  数据库中还没有记录(可能有 也可能没有) */s.save(c);/** * 持久对象 *  oid不为null *  session的一级缓存中有该对象 *  数据库中有对应的记录 */Customer c1=(Customer)s.get(Customer.class, 2);s.flush();ts.commit();s.close();/** * session关闭 游离对象 * 在session的一级缓存中没有该对象 * 该对象的oid不为null * 在数据库中有对应的记录(可能有 可能没有  如果没有commit就没有数据); */System.out.println(c);//////////////////////////////////////////s=sf.openSession();ts=s.beginTransaction();Customer c3=(Customer) s.get(Customer.class,3);s.delete(c3);/** * c3就是删除对象 *  oid不能为null *  缓存中不存在 *  数据库中没有对应的记录 */s.flush();ts.commit();s.close();}//将持久对象变为游离对象@Testpublic void testEvict(){Session s=sf.openSession();Transaction ts=s.beginTransaction();Customer c=(Customer) s.get(Customer.class,2);/** * s.evict(c) * 把一个持久化对象转化为游离对象 * 把对象c1 从session的一级缓存中删除 */s.evict(c);Customer c2=(Customer)s.get(Customer.class,2);s.flush();ts.commit();s.close();}