Chinaunix首页 | 论坛 | 博客
  • 博客访问: 500140
  • 博文数量: 1496
  • 博客积分: 79800
  • 博客等级: 大将
  • 技术积分: 9940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:22
文章分类

全部博文(1496)

文章存档

2011年(1)

2008年(1495)

我的朋友

分类:

2008-09-09 17:10:19

      一。hibernate 实现分页如果需要指定结果集的范围(希望返回的最大行数/或开始的行数),应该使用Query接口提供的方法。 Hibernate 知道如何将这个有限定条件的查询转换成数据库的原生SQL Session session = HibernateSessionFactory.getSession();  Query query = session.createSQLQuery("select * from student");// sql  query.setFirstResult(2);  query.setMaxResults(1);

     query.setFirstResult(2);  开始的行

    query.setMaxResults(1);返回的最大行

    从第2行开始 返回1行

    二。 对象- 绑定参数查询

    接口Query提供了对命名参数(named parameters)、JDBC风格的问号(?)参数进行绑定的方法。 不同于JDBC,Hibernate对参数从0开

    始计数。 命名参数在查询字符串中是形如:name的标识符,优点是: 命名参数(named parameters)与其在查询串中出现的顺序无关 它们可在同一查询串中多次出现 它们本身是自我说明的

 三。 如果JDBC支持可滚动的ResuleSet,Query接口使用ScrollableResults,允许在查询结果中灵活移动。

    四。对象-使用原生SQL的查询

    可以使用createSQLQuery()方法,用SQL来描述查询,并由Hibernate处理将结果集转换成对象的工作。注意:可以在任何时候调用session.connection()来获得并使用JDBC Connection对象。 如果选择使用Hibernate的API, 你必须把

    SQL别名用大括号包围起来。

    五。对象-自动状态检测

    saveOrUpdate()用途和语义可能会使新用户感到迷惑。 首先,只要没有试图在某个session中使用来自另一session的实例,就不需要使用update(), saveOrUpdate(),或merge()。通常下面的场景会使用update()或saveOrUpdate(): 程序在第一个session中加载对象 该对象被传递到表现层 对象发生了一些改动 该对象被返回到业务逻辑层 程序调用第二个session的update()方法持久这些改动  saveOrUpdate()做下面的事: 如果对象已经在本session中持久化了,不做任何事 如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常 如果对象没有持久化标识(identifier)属性,对其调用save() 如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save() 如果对象是附带版本信息的(通过) 并且版本属性的值表明其是一个新实例化的对象,save()它。否则update() 这个对象 merge()可非常不同: 如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例 如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例 最后返回该持久实例 用户给出的这个对象没有被关联到session上,它依旧是脱管的 六。对象-Session刷出

    每间隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象的状态同步到JDBC连接中。这个过程被称为刷出(flush),默认会在下面的时间点执行: 在某些查询执行之前 在调用org.hibernate.Transaction.commit()的时候 在调用Session.flush()的时候 涉及的SQL语句会按照下面的顺序发出执行: 所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序 所有对实体进行更新的语句 所有进行集合删除的语句 所有对集合元素进行删除,更新或者插入的语句 所有进行集合插入的语句 所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序 (有一个例外是,如果对象使用native方式来生成ID(持久化标识)的话,它们一执行save就会被插入。)

 

【责编:landy】

--------------------next---------------------

阅读(90) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~