如何编写MySQL(Hibernate)查询语句获取单个湖泊的所有预订记录
关联查询解决方案
以下分别提供原生MySQL、Hibernate两种场景的查询写法:
1. 原生MySQL查询
通过表关联匹配指定湖泊ID即可,语句如下:
-- 替换下方的[目标湖泊ID]为你要查询的实际湖泊id值 SELECT r.* FROM Reservation r INNER JOIN Peg p ON r.peg_id = p.id INNER JOIN Lake l ON p.lake_id = l.id WHERE l.id = [目标湖泊ID];
如果你确认传入的lake_id为合法存在值,也可以省略Lake表的关联,直接通过peg的lake_id过滤,性能更优:
SELECT r.* FROM Reservation r INNER JOIN Peg p ON r.peg_id = p.id WHERE p.lake_id = [目标湖泊ID];
2. Hibernate查询
前提是你的实体类已经配置好正确的关联注解:Peg实体添加@ManyToOne关联Lake,Reservation实体添加@ManyToOne关联Peg。
HQL写法
SELECT r FROM Reservation r WHERE r.peg.lake.id = :targetLakeId
调用时传入参数即可:
Query query = session.createQuery(hql语句); query.setParameter("targetLakeId", 你要查询的湖泊ID值); List<Reservation> result = query.list();
注解式查询(Spring Data JPA场景)
如果是使用Spring Data JPA封装的Hibernate,可以直接在Repository接口中定义查询方法:
List<Reservation> findAllByPeg_Lake_Id(Integer targetLakeId);
内容的提问来源于stack exchange,提问作者Dawid Sieradzki
相关产品推荐
相关产品推荐

