优化抓取和高速缓存
1. 对象获取方法:
导航对象图,从一个已经加载的对象开始,通过如User.getAddress().getCity()等属性访问方法访问被关联的对象。
通过标识符获取,当一个对象的唯一标识符值已知时,这是最方便的方法
HQL(Hibernate Query Language, Hibernate查询语言),它是一种完全面向对象的查询语言。Java QL(Java Persistence query language, JPA持久化查询语言)是HQL的一个标准子集。
Query q = session.createQuery(“from User as u where u.firstname = :first”);
q.setString(“fname”,”John”);
List result = q.list();
HQL常用于对象获取,而不是更新、插入或者删除数据,对象状态同步是持久化管理器的工作,而不是开发人员的工作。HQL除了查询更有一个高级的特性,例如:
1. 对按引用相关或者处于集合中的被关联对象的属性,应用限制能力(用查询语言导航对象图)
2. 只获取一个或者多个实体的属性的能力,没有加载实体本身到持久化上下文的系统开销。有时这被称作报告查询,更准确的称呼是投影。
3. 对查询结果进行排序的能力。
4. 对查询结果进行分页的能力。
5. 与group by、having和聚集函数(如sum、min和max/min)联合使用。
6. 当每一行获取多个对象时使用外部联结。
7. 调用标准的和用户定义的SQL函数的能力。
8. 子查询(嵌套查询)。
Hibernate Criteria接口,它提供了一种类型安全和面向对象的方式来查询,而不需要进行字符串操作。
1. 按条件查询. Hibernate的条件查询(Query By Criteria, QBC)API允许查询在运行时通过criteria对象的操作进行创建。
Criteria criteria = session.createCriteria(User.class);
Criteria.add(Restrictions.like(“firstname”, “John”);
List result = criteria.list();
2. 按示例查询,作为Criteria工具的一部分,Hibernate支持按示例查询(Query By Example, QBE).查询思想是,应用程序通过某些属性设置,提供被查询类的实例。查询结果返回带有匹配属性值的所有持久化实例。
Criteria criteria = session.createCriteria(User.class);
User exampleUser = new User();
exampleUser.setFirstname(“john”);
criteria.add(Example.create(exampleUser));
criteria.add(Restricitions.isNotNull(“homeAddress.city”));
List result = criteria.list();
原生的SQL查询,包括存储过程的调用(在这里Hibernate仍然把JDBC的结果集映射到持久化对象图中)。