如何实现JPQL的关联查询
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,小编给大家分享一下如何实现JPQL的关联查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一关联到多的查询和从多关联到一
千家信息网最后更新 2025年02月23日如何实现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安全错误
数据库的锁怎样保障安全
mc服务器领地扩大缩小指令
向日葵不显示连接服务器
20年网络安全周
网络安全靠人民作为
不断强化网络安全措施
南京现代化软件开发资费
世界软件开发者出售事件
鹰潭正规服务器价格
软件开发中编码阶段位于
如何提前下载服务器数据
厦门朗讯软件开发
收银机前台连不上数据库怎么办
青岛成讯网络技术
平常数据保存在数据库吗
叙述网络安全发展情况
1u服务器耗电
2020年网络技术挑战赛总决赛
国家网络安全攻防公安部
开心大富翁服务器被拒绝什么意思
通过服务名访问服务器
软件开发需要建模工具吗
公众号图文发布软件开发课程
曜月网络技术有限公司
网络安全的水彩画
空间数据库的组织
网络安全法网络治理的概念
pg数据库表锁住了怎么办
亚投行网络安全工作人员
社交软件开发哪儿好
销售企业实时数据库价格