疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

session的使用方法


 

  session是hibernate负责对象存取的接口,有了session对象就可以以面向对象的方式保存、获取、更新和删除对象了。session接口的方法很多,按照功能可以分为4种:操作对象、管理连接、管理缓存和生成检索对象。下面分别介绍使用session接口的方法。

  操作对象

  使用session操作对象也即获取、保存、更新和删除对象。等于每一种数据库操作,所要做的只是简单地调用几个方法,而不用管数据库驱动的加载、连接的建立和SQL的发送。

  (1)获取对象

  获取对象是指根据给定对象的类型和标识符从数据库中加载对象。session接口提供了两个方法用来获取对象,分别为get()和load()。get()方法根据给定标识和实体类返回持久化对象实例,则返回null。Load()方法在符合条件实例存在的情况下,根据给定的实体类和标识返回持久化类对象。

  简单而言,load()方法认为该数据在数据库中一定存在,可以放心地使用代理来延迟加载,如果在使用过程中发现了问题,只能抛出异常;而对于get()方法,hibernate一定要获取到真实的数据,否则返回null。获取对象的使用示例如下:

  Transaction t=session.beginTransaction();

  Member member=(Member)session.get(Member.class,1);

  t.commit();

  session.close();

  在该段代码中,hibernate从数据库中取出标识符为1、类型为Member的Member对象。代码开始启动事务,然后加载Member对象,调用commit()方法提交事务,最后关闭session

  释放其所占的资源,返回到连接池。当要检索的对象不全具备类型和标识符时,以上两种方法将不能获取对象,这就需要借助查询接口。

  (2)保存对象

  保存对象实际上就是调用hibernate事务把一个持久化对象保存到数据库中,示例如下所示,保存对象使用的是session对象的save()方法。

  public void save(Member member){//保存对象

  try{

  Session sessin=getSession();

  Transaction tx=session.beginTransaction();

  session.save(member);

  tx.commit();

  session.close();

  }catch(RuntimeException re){

  re.printStackTrace();

  }

  }

  这段代码与获取对象的代码没有多大区别,只不过有get()方法换成save()方法而已。首先取得session对象并开始事务,调用save()方法保存Member对象member,然后提交事务关闭session。处于session.beginTransaction()和tx.commit()之间的代码是数据库事务操作的集合。调用save()方法后,对象的状态将有暂态(假如传递过来的参数member对象为暂态)因此不会发生数据库访问。当tx.commit()被调用后,hibernate会隐式调用session.flush()方法(也可以显式调用),将session中对象的变化从缓存中刷出,至此session对象才会请求一个数据库连接,并生成Insert SQL语句将记录写入数据库中。随着session对象的关闭,member对象脱离工作单元的管理,成为游离态对象。