JPQL:Java持久化查询语言。是一种与数据库无关的,基于实体(entity-based)的查询语言。JPQL在语法上与SQL相似:“ select from [where] [group by] [having] [order by]
”。但两者之间有一个重要的区别,JPQL操作的是“抽象持久化模型(abstract persistence schema)”,而不是数据库定义的物理模型。使用SQL,你可以直接查询数据库中表的字段;使用JPQL,你可以查找实体的属性。
注意:除实体名称和实体字段外,JPQL查询不区分大小写。
例如,有下面这样一个查询语句: SELECT u.username FROM User u
在这个查询语句中,u.username
一个表达式的结果是一个String
类型。这个查询会返回一个String
对象的list。list中的各个对象代表系统中一个不同的用户名。
联结(连接/关联)
JPQL仍然支持和SQL中类似的关联语法:
left out join/left join
left out join/left join等,都是允许符合条件的右边表达式中的Entities 为空(需要显式使用left join/left outer join 的情况会比较少。)
inner join
inner join 要求右边的表达式必须返回Entities。
left join fetch/inner join fetch
在默认的查询中,Entity中的集合属性默认不会被关联,集合属性默认是延迟加载( lazy-load )。那么,left fetch/left out fetch/inner join fetch提供了一种灵活的查询加载方式来提高查询的性能(集合属性被关联,同Entity同时加载而不是在需要时再加载,这样就转换为SQL语句时为一条SQL语句,而不是加载Entity时一条语句,加载集合属性时有N(等于Entity数量)条语句,避免了N+1问题,提高了查询性能)。
从一关联到多的查询和从多关联到一的查询来简单说说关联查询。 实体Team:球队。 实体Player:球员。 球队和球员是一对多的关系。
http://wenku.baidu.com/link?url=EQ2cExXecXTDmRASb6m6jSp4DDAHjlSFYTtkgQK-fl2aRvW0tAuSb0-x397QHDmbTWs12e17rPSugu6YpbHXiybT5RR3effbEoKYAjagfbi