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




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值