标签:session
Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在:脱管状态(detached): 已经进行过持久化,但当前未与任何Session相关联
1,通过get()或load()方法得到的实例都是持久化状态的,把临时实例变成持久化实例
2,持久化实例可以通过调用delete(),close()变成脱管状态。
3,脱管状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。
myeclipse中session中的方法:
Session的load()与get()方法:
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别:
1)当数据库中不存在与OID对应的记录时,load()方法抛出org.hibernate.ObjectNotFoundException异常,而get()方法返回为null
(2)load方法采用配置的加载策略(默认为延迟加载),而get()方法则会忽略配置,总是采用立即加载方法。
Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象。
public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable id, LockOptions lockOptions); public Object get(String entityName, Serializable id); public Object get(String entityName, Serializable id, LockOptions lockOptions);
public void testGet() throws Exception { Session session = sessionFactory.openSession(); Student student = (Student) session.get(Student.class, 1); // Student student = (Student) session.get("com.entity.Student", 1); System.out.println(student); session.close(); }Session的save()方法:
注意:session的save()方法是用来持久化临时对象的。不应将持久化对象或游离对象传递给save()方法
若将持久化对象传递给save()方法,则该步保存操作是多余的。
若将游离对象传递给save()方法,则会重新生成ID,再保存一次。
Session的update()方法:
Session的update()方法使一个脱管对象转变为持久化对象。它完成以下操作:
(1)将游离对象加入到Session缓存中,使其转变为持久化对象。
(2)计划执行一个update语句。
Session的saveOrUpdate()方法:
Session的saveOrUpdate()方法同时包含了save()方法与update()方法的功能,如果传入的参数是临时对象,就调用save()方法;如果传入的参数是游离对象,就调用update()方法。
Session的delete()方法:
Session的delete()方法用于从数据库中删除一个java对象。delete()方法既可以删除持久化对象,也可以删除脱管对象。其处理过程如下:
(1)如果传入的参数是脱管对象,则先使脱管对象与Session关联,使它变为持久化对象。如果参数是持久化对象,则忽略该步。
(2)计划执行一个delete语句。
(3)把对象从Session缓存中删除,该对象进入删除状态。
System.out.println("获取Session..."); Session session = HibernateSessionFactory.currentSession(); System.out.println("开始Transaction..."); Transaction tx = session.beginTransaction(); Test my_hibernate = null; System.out.println("Iterator查询..."); Iterator iterator = session.iterate("from Test order by xm"); while(iterator.hasNext()) { my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); } System.out.println("List查询..."); List list = session.find("from Test order by xm"); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); }
System.out.println("Query查询..."); Query query = session.createQuery("from Test order by xm"); list = query.list(); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); } iterator = query.iterate(); while(iterator.hasNext()) { my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); } System.out.println("Criteria查询..."); Criteria criteria = session.createCriteria(Test.class); criteria.add(Expression.eq("xb","f")); list = criteria.list(); for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); } System.out.println("更新数据..."); my_hibernate = (Test)session.load(Test.class,"121"); my_hibernate.setXb("f"); System.out.println("提交Transaction..."); tx.commit(); System.out.println("关闭Session..."); HibernateSessionFactory.closeSession();
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:session
原文地址:http://blog.csdn.net/tuke_tuke/article/details/49699757