1.导航对象图查询:根据已经加载的对象,导航到其他对象。



例如,对于已经加载的Customer对象,调用它getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用了延迟加载检索策略,那么首次执行此方法时,Hibernate会从数据库中加载关联的Order对象,否则就从缓存中取得Order对象。



2.OID方式:按照对象的OID来检索对象。



Session的get()和load()方法提供了这种功能。如果在应用程序中事先知道了OID,就可以使用这种检索对象的方式。



2.1.get与load比较



get()和load(),它们的用法完全一样,都需要两个参数,第1个是持久化对象类名.class,第2个是行号,也就是说这2个方法都只能返回固定的某一行的数据,但是需要注意的是:当输入的参数行号在数据库中不存在时,get()会返回一个空对象,不会报错,而load()会直接报错。



3.HQL检索方式:Hibernate Query Language(重要的、Hibernate强调的)



使用面向对象的HQL查询语言。Session的find()方法用于执行HQL查询语句。此外,Hibernate还提供了Query接口,它是Hibernate提供的专门的HQL查询接口,能够执行各种复杂的HQL查询语句。 


它具有以下功能: 


1)在查询语句中设定各种查询条件 


2)支持投影查询,即仅检索出对象的部分属性 


3)支持分页查询 


4)支持连接查询 


5)支持分组查询,允许使用having和group by关键字 


6)提供内置聚集函数,如sum()、min()和max() 


7)能够调用用户定义的SQL函数 


8)支持子查询,即嵌入式查询 


9)支持动态绑定参数 


例:Query query = session.createQuery(“from UserPO”);获得一个query对象,注意参数字符串中不是一个SQL语句,from后面跟的是持久化对象名字,List list = query.list();就可以获得数据库中对应表的数据集合



4.QBC检索方式:Query By Criteria的API来检索对象



这种API封装了基于字符串形式的查询语句,提供了更加面向对象的接口 


例:Criteria cr = session.createCriteria(UserPO.class);创建一个Criteria对象,参数是所关联的持久化对象,cr.add(Restrictions.ge(“id”, 2));将查询条件加入对象中,后面的操作就和query对象一样了。



5.本地SQL:SQL语句查询



使用本地数据库的SQL查询语句,Hibernate会负责把检索到的JDBC ResultSet结果集映射为持久化对象图。