`
picluo
  • 浏览: 334797 次
  • 性别: Icon_minigender_1
  • 来自: 大力亚
社区版块
存档分类
最新评论

Hibernate插入、查询、删除操作 HQL

阅读更多

Hibernate的所有的操作都是通过Session完成的.

基本步骤如下:

1:通过配置文件得到SessionFactory:

     SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

2:通过SessionFactory 得到一个Session

     Session session=sessionFactory.openSession();

3:通过session进行插入,删除,修改以及查询.

    插入例子:(1)声明一个事务;(2)Session执行save()操作;(3)事务提交;(4)关闭Session,可选.                   
             public void insert(Person p){
   Transaction tran=session.beginTransaction();
   session.save(p);              
                tran.commit(); 
//   session.close();             
             }     
    修改例子:(1)声明一个事务;(2)Session执行update()操作;(3)事务提交;(4)关闭Session,可选.

             public void update(Person p){

   Transaction tran=session.beginTransaction();

   session.update(p);

   tran.commit();

//   session.close();

   }

    删除例子(主键删除,推荐使用):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执行Query的executeUpdate()操作;(5)Session事务提交

     public void delete(int id){

   String hql="delete Person as p where p.id=?";

   Query query=session.createQuery(hql);

   query.setInteger(0,id);

   query.executeUpdate();

   session.beginTransaction().commit();

            }

   删除例子(对象删除):(1)声明一个事务;(2)Session执行delete()操作;(3)事务提交;(4)关闭Session,可选.
    public void delete(Person p){

   Transaction tran = session.beginTransaction();

   session.delete(p);  
   tran.commit();

   session.close();  
   }

   查询例子:(跟删除差不多) 查询语句不需要事务提交

(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;

   public Persion queryById(int id){

   String hql="from Person as p where p.id=?";

   Query query=session.createQuery();
 
   query.setInteger(0,id);

   List rsList=query.list();

   iterator it=rsList.iterator();

   Person person=null;

   while(it.haseNext()){

     person=(Person)it.next();

    }

   return person;

   }
session.delete()- -
session.delete(obj)将obj的状态变为transient。两种情况
1)obj是session的cache里边的cache没有的,比如:
         session.delete(new Employee(4));
2)obj存在于session的cache中,比如:
         Employee employee = (Employee)session.load(Employee.class, new Integer(4));
         session.delete(employee);

这两种情况都是允许的,hibernate都会发送一条delete语句给数据库。

delete执行之后,如果调用了session.load(), 又可以分为两种情况:
1)在session.flush()之前,如:
           tx.beginTransaction();
    session.delete(new Employee(4));
           session.load(Employee.class, new Integer(4));//发生在session.flush()之前
           tx.commit();
      那么hibernate会抛出ObjectDeletedException:The object with that id was deleted:

2)在session.flush()之后,如:
           tx.beginTransaction();
    session.delete(new Employee(4));
           session.load(Employee.class, new Integer(4));
           tx.commit();

           tx.beginTransaction();
           session.load(Employee.class, new Integer(4));//同一个session中,上面的tx.commit()将session flush了一次。
           tx.commit();
      那么这个时候hibernate仅仅会抛出ObjectNotFoundException:No row with the give...
表示找不到该object。如果第二个tx里边采用session.get()也就不会抛出exception了。

delete执行之后,如果调用了session.save(obj):
           tx.beginTransaction();
           Employee employee = (Employee)session.load(Employee.class, new Integer(4));
     session.delete(employee);
           System.out.println(employee);
           session.save(employee);
           System.out.println(employee);
           tx.commit();
      这种情况是完全合理的,合法的,
      delete将employee从persistent的状态变为transient的状态。
      save将employee从transient状态变为persistent的状态。
      save一个被delete的obj的时候,在save处hibernate强制执行session.flush(),发送delete语句,然后按照常规的save流程来进行。为什么要这么做,还没有完全想明白。

delete执行之后,如果对obj对象属性的修改,tx.commit()时不会进行dirtyChecking。

4
3
分享到:
评论
1 楼 wangtao0501 2009-12-23  
“主键删除,推荐使用”和对象删除的区别在哪,是性能上吗

相关推荐

    Hibernate+中文文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    hibernate3.2中文文档(chm格式)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    HibernateAPI中文版.chm

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate中文详细学习文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate 中文 html 帮助文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...

    最全Hibernate 参考文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 ...

    hibernate 体系结构与配置 参考文档(html)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate教程

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    hibernate3.04中文文档.chm

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by...

    Hibernate3+中文参考文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 ...

    hibernate 框架详解

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order ...

    Hibernate参考文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...

    低清版 大型门户网站是这样炼成的.pdf

    5.3 hql查询方式 303 5.3.1 基本查询 303 5.3.2 条件查询 305 5.3.3 分页查询 307 5.3.4 连接查询 308 5.3.5 子查询 311 5.3.6 动态实例化查询结果 313 5.4 qbc查询方式 314 5.4.1 基本查询 315 5.4.2 qbe...

    jdbc基础和参考

    hibernate不在自动生成主键值,需要你在插入时自己指明 3.hilo:高低值算法,由数据库表提供高值,程序提供低值 value = hi*(max_lo+1)+lo 4.sequences Cat: cid name color weight age ------------------------...

    JAVA程序开发大全---上半部分

    9.3 MyEclipse中Hibernate框架的高级操作 152 9.3.1 在Hibernate反向工程中定制映射关系 153 9.3.2 使用HQL编辑器 154 9.4 Hibernate应用实例:基于Struts+Hibernate的登录系统 155 9.5 本章小结 160 第10章 Spring...

    Java学习笔记-个人整理的

    {1.11.2.3}插入排序}{40}{subsubsection.1.11.2.3} {1.11.3}递归调用}{41}{subsection.1.11.3} {1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{...

Global site tag (gtag.js) - Google Analytics