hibernate中的session用法

Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在:

临时状态(transient): 不曾进行持久化,未与任何Session相关联

持久化状态(persistent): 仅与一个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()方法使一个临时对象转变为持久化对象

(1)将临时对象加入到Session缓存中,使其进入持久化状态。

(2)选用映射文件指定的标识符生成器,为持久化对象分配唯一的ID。

(3)计划执行一个insert语句

注意: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(); 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-03 22:38:18

hibernate中的session用法的相关文章

hibernate中Restrictions的用法

方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge >= Restrictions.lt < Restrictions.le <= Restrictions.between BETWEEN Restrictions.like LIKE Restrictions.in in Restrictions.and and Restrictions.or or

hibernate中inverse的用法

hibernate中inverse的用法 转自:http://blog.csdn.net/leader_lx/archive/2008/08/06/2774137.aspx 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录 Hibernate仅仅按照主控方对象的状态的变化来同

Hibernate中Criteria的用法

Hibernate中Criteria的用法 criteria英[kra??t??r??]美[kra??t?r??]标准 1,Criteria Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria . 2,DetachedCriteria Spring 的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可

第四讲 :hibernate中的session

hibernate中的session中可以进行增删改差,通过工具类可以得到相关的工具类. 方法概要:  Transaction beginTransaction()开始一个工作单元,得到关联的事务对象.  void cancelQuery()取消当前执行的查询.  void clear()彻底清除session.  Connection close()通过断开JDBC连结结束 Session和清除.  Connection connection() 得到JDBC连结  boolean conta

Hibernate中的Session

1.Hibernate中的Session指的是什么? Session可以理解为一个可以操作数据库的对象. 2.可否将单个的Session在多个线程间进行共享? Session代表着Hibernate所做的一小部分工作,它负责维护者同数据库的链接而且不是线程安全的,也就是说,Hibernage中的Session不能在多个线程间进行共享.虽然Session会以主动滞后的方式获得数据库连接,但是Session最好还是在用完之后立即将其关闭.

hibernate中SessionFactory,Session的理解?

Session接口         Session接口对于Hibernate   开发人员来说是一个最重要的接口.然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源.这在实际项目 中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响.但值得注意的是 Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象.         在Hibern

Hibernate中的Session缓存问题

1. Session 缓存: 1) . 在 Session 接口的实现中包括一系列的 Java 集合 , 这些 Java 集合构成了 Session 缓存 . 它用于存放 Session 关联的对象( Session 关联对象的方式有非常多种. 比如:session.get (Class , OID ). session.update(). session.save ()  ...). 仅仅要 Session 实例没有结束生命周期 , 且没有清理缓存.则存放在它缓存中的对象也不会结束生命周期.

一口一口吃掉Hibernate(八)——Hibernate中inverse的用法

一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了"inverse=false"(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库.按照原来的映射文件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对象状态的变

hibernate中获得session的方式

his.getsession实际上是调用了父类中的方法获得session.使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session.这样做有可能有问题,就是超session池连接数的时候,spring无法自动的关闭session. 不推荐使用 this.getHibernateTemplate().getSessionFactory().getCurrentSession()从spring管理的sessionFactory中创