JPA的查询语言JPQL的关联查询

上传人:飞*** 文档编号:4880511 上传时间:2017-08-26 格式:DOC 页数:5 大小:56.50KB
返回 下载 相关 举报
JPA的查询语言JPQL的关联查询_第1页
第1页 / 共5页
JPA的查询语言JPQL的关联查询_第2页
第2页 / 共5页
JPA的查询语言JPQL的关联查询_第3页
第3页 / 共5页
JPA的查询语言JPQL的关联查询_第4页
第4页 / 共5页
JPA的查询语言JPQL的关联查询_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《JPA的查询语言JPQL的关联查询》由会员分享,可在线阅读,更多相关《JPA的查询语言JPQL的关联查询(5页珍藏版)》请在金锄头文库上搜索。

1、JPA 的查询语言:JPQL 的关联查询本文主要讲解了 JPA 的查询语言,从一关联到多的查询和从多关联到一的查询来简单说说关联查询。详细请看下文AD:从一关联到多的查询和从多关联到一的查询来简单说说关联查询。实体 Team:球队。实体 Player:球员。球队和球员是一对多的关系。Team.java: package datacom.jpa.entity; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column;

2、import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; /* * 球队 * author Luxh */ Entity Table(name=team) public class Team Id GeneratedValue private

3、Long id; /*球队名称*/ Column(name=name,length=32) private String name; /*拥有的球员*/ OneToMany(mappedBy=team,cascade=CascadeType.ALL,fetch=FetchType.LAZY) private Set players = new HashSet(); /以下省略了 getter/setter 方法 /. Player.java: package datacom.jpa.entity; import javax.persistence.CascadeType; import jav

4、ax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /* * 球员 * author Luxh */ Entity Table(name=player) public class Playe

5、r Id GeneratedValue private Long id; /*球员姓名*/ Column(name=name) private String name; /*所属球队*/ ManyToOne(cascade=CascadeType.MERGE,CascadeType.REFRESH) JoinColumn(name=team_id) private Team team; /以下省略了 getter/setter 方法 /. 1、从 One 的一方关联到 Many 的一方:查找出球员所属的球队,可以使用以下语句: SELECT DISTINCT t FROM Team t JOI

6、N t.players p where p.name LIKE :name 或者使用以下语句: SELECT DISTINCT t FROM Team t,IN(t.players) p WHERE p.name LIKE :name 上面两条语句是等价的,产生的 SQL 语句如下: select distinct team0_.id as id0_, team0_.name as name0_ from team team0_ inner join player players1_ on team0_.id=players1_.team_id where players1_.name lik

7、e ? 从 SQL 语句中可以看到 team inner join 到 player。inner join 要求右边的表达式必须有返回值。不能使用以下语句: SELECT DISTINCT t FROM Team t WHERE t.players.name LIKE :name 不能使用 t.players.name 这样的方式从集合中取值,要使用 join 或者 in 才行。2、从 Many 的一方关联到 One 的一方:查找出某个球队下的所有球员,可以使用以下查询语句: SELECT p FROM Player p JOIN p.team t WHERE t.id = :id 或者使用以

8、下语句: SELECT p FROM Player p, IN(p.team) t WHERE t.id = :id 这两条查询语句是等价的,产生的 SQL 语句如下:(产生了两条 SQL) Hibernate: select player0_.id as id1_, player0_.name as name1_, player0_.team_id as team3_1_ from player player0_ inner join team team1_ on player0_.team_id=team1_.id where team1_.id=? Hibernate: select t

9、eam0_.id as id2_0_, team0_.name as name2_0_ from team team0_ where team0_.id=? 从 Many 关联到 One 的查询,还可以使用以下的查询语句: SELECT p FROM Player p WHERE p.team.id = :id 这条语句产生的 SQL 如下:(产生了两条 SQL) Hibernate: select player0_.id as id1_, player0_.name as name1_, player0_.team_id as team3_1_ from player player0_ wh

10、ere player0_.team_id=? Hibernate: select team0_.id as id0_0_, team0_.name as name0_0_ from team team0 以上从 Many 到 One 的关联查询都产生了两条 SQL,还可以使用 join fetch 只产生一条 SQL 语句。查询语句如下: SELECT p FROM Player p JOIN FETCH p.team t WHERE t.id = :id 这条查询语句产生的 SQL 如下: Hibernate: select player0_.id as id1_0_, team1_.id as id2_1_, player0_.name as name1_0_, player0_.team_id as team3_1_0_, team1_.name as name2_1_ from player player0_ inner join team team1_ on player0_.team_id=team1_.id where team1_.id=? 作者:java 基础来源: http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号