如何实现JPQL的关联查询
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下如何实现JPQL的关联查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一关联到多的查询和从多关联到一
千家信息网最后更新 2025年01月18日如何实现JPQL的关联查询
小编给大家分享一下如何实现JPQL的关联查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
从一关联到多的查询和从多关联到一的查询来简单说说关联查询。
实体Team:球队。
实体Player:球员。
球队和球员是一对多的关系。
Team.java:
package com.cndatacom.jpa.entity; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; 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 Long id; /**球队名称*/ @Column(name="name",length=32) private String name; /**拥有的球员*/ @OneToMany(mappedBy="team",cascade=CascadeType.ALL,fetch=FetchType.LAZY) private Setplayers = new HashSet (); //以下省略了getter/setter方法 //...... }
Player.java:
package com.cndatacom.jpa.entity; import javax.persistence.CascadeType; import javax.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 Player{ @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 JOIN 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 like ?
从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
或者使用以下语句:
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 team0_.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_ where 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=?
以上是"如何实现JPQL的关联查询"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
语句
查询
关联
球员
球队
一方
可以使
用以
篇文章
内容
实体
所属
方法
等价
不怎么
右边
名称
大部分
姓名
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器单机防御
头条服务器厂房
三级网络技术自为知笔记
德育教育与网络安全课程
显示软件开发适合什么电脑
狼人加鲁鲁兽数码数据库
如何用搜索代码搜索数据库
维护正义网络安全视频
易保网络技术薪资
奉贤区本地网络技术厂家供应
王忠良加拿大软件开发
定制化国产服务器批发
上海赤焰网络技术有限公司
学软件开发年龄大了怎么办
代理服务器发邮件
河北银行软件开发公司吗
8电口网卡 服务器
服务器硬盘内容怎么复制
数据库与数据库直接关联
dns找不代理服务器
在软件开发中常遇的问题
数据库的基础库和运行库的区别
女性从事计算机网络技术
git服务器网页管理
计算机网络技术能学前端吗
idea中引入数据库的使用
mysql数据库表恢复
网络技术使用ip地址划分子网
闪电之刃服务器人数
广州升腾服务器厂家直销