如何实现JPQL的关联查询
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,小编给大家分享一下如何实现JPQL的关联查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一关联到多的查询和从多关联到一
千家信息网最后更新 2025年11月09日如何实现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 Set players = 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安全错误
数据库的锁怎样保障安全
幻塔红石柱服务器是哪些平台的
百姓部落互联网科技有限公司
我的世界离线账号怎么加入服务器
山东服装职业学院网络技术专升本
王鑫网络安全
手机邮箱需要电脑连接服务器吗
杭州专用设备管理软件开发
大东海 软件开发
黄石美剧软件开发
烟台大数据库安全
域服务器很卡
奥迪车载软件开发
sql指令建数据库
怀旧服服务器阵营对比
5g网络技术 应用
iphone保护网络安全
怎样加密数据库
网络技术专升本对口学校
数据库管理系统安全的策略
网络安全该不该读博
软件开发宣传稿
海事局网络安全会议
1620v3 服务器内存
宁夏广播电视台 网络安全
原子服务器
数据库视图开好了怎么测试
计算机网络技术的缺点
国六网络安全新政
阿里云服务器扩容计算方式
欧卡提示与服务器连接不可靠