首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JPA2中的查询:类型安全与面向对象(三)

2012-11-06 
JPA2中的查询:类型安全与面向对象(3)该文翻译自网络,原文地址:http://www.developer.com/java/ent/article

JPA2中的查询:类型安全与面向对象(3)

该文翻译自网络,原文地址:

http://www.developer.com/java/ent/article.php/3902911/Querying-in-JPA-2-Typesafe-and-Object-Oriented.htm

当涉及到collection属性时,抓取连接对优化数据访问是非常有帮助的。这是通过预抓取关联对象和减少懒加载开销而达到的。使用?criteria 查询,fetch方法用于指定关联属性

Fetch连接的语义与Join是一样的,因为Fetch操作不返回Path对象,所以它不能将来在查询中引用。在以下例子中,查询Dept对象时employeeCollection对象被加载,这不会有第二次查询数据库,因为有懒加载。

?

Root实例,Join实例或者从另一个Path对象的get方法获得的对象使用get方法可以得到Path对象,当查询需要导航到实体的属性时,路径表达式是必要的。Get方法接收的参数是在实体元模型类中指定的属性。Path对象一般用于Criteria查询对象的select或where方法。例子如下:

?

CriteriaQuery?实例的groupBy?方法用于基于Expression的结果分组。查询通过设置额外表达式,以后调用having方法。下面代码片段中,查询按照Employee类的name属性分组,且结果以字母N开头:

?

?CriteriaQuery<Tuple> cq = criteriaBuilder.createQuery(Tuple.class);

使用该方法,查询结果能由非实体类型组成。在下面的代码片段中,为EmployeeDetail类创建了一个Criteria查询对象,而EmployeeDetail类并不是实体类型。

?

数据库中的一行数据或单个记录通常称为元组。通过调用CriteriaBuilder.createTupleQuery()方法,查询可以用于元组上。CriteriaQuery.multiselect方法传入参数,它必须在查询中返回。

?

CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();   Root<Employee> employee = criteriaQuery.from(Employee.class);   criteriaQuery.multiselect(employee.get(Employee_.name).alias("name"), employee.get(Employee_.age).alias("age"));   em.createQuery(criteriaQuery).getResultList();

?对应 SQL: SELECTname, age FROM employee

结论

? ? ?Criteria查询是一种以更加面向对象的方式查询数据库的方法、在本文中,我讨论了JPA2中类型安全的Criteria查询,以及对于理解Criteria查询非常重要的元模型的概念。也讨论了Criteria查询中的各种API。

?

?

(完)

热点排行