JPA中使用@Query注解多表联查
原生SQL:
select `user`.id, `user`.`name`,dept.name deptName,sum(sd.score) SumScore
from `user`
LEFT JOIN
score_detail sd
ON
`user`.id = sd.user_id
LEFT JOIN
department dept
ON
`user`.department_id = dept.id
GROUP BY `user`.`id` ORDER BY sum(sd.score);
经过查阅多方资料得知,
异常: org.hibernate.hql.ast.QuerySyntaxException: Path expected for join
HQL是面向对象的,所以join的条件是反映在对象的关系中的,所以,你在用join的时候,无论是left join还是right join,都是
FROM DomainA a LEFT JOIN a.b b WHERE
或者
FROM DomainA a RIGHT JOIN a.b b WHERE
而不能直接是两个对象直接JOIN。
最终结果:
@Query("SELECT NEW com.ygsm.pojo.vo.SumScoreRankVO(u.id, u.name, d.name, SUM(s.score)) "
+ "FROM ScoreDetail s "
+ "RIGHT JOIN s.user u "
+ "RIGHT JOIN u.department d "
+ "WHERE s.createDate BETWEEN ?1 AND ?2 "
+ "GROUP BY u.id "
+ "ORDER BY SUM(s.score) DESC")
List<SumScoreRankVO> findUserScoreRank(Date startDate, Date endDate);
JPA中使用@Query注解多表联查的更多相关文章
- 【spring data jpa】repository中使用@Query注解使用hql查询,使用@Param引用参数,报错:For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on
在spring boot中, repository中使用@Query注解使用hql查询,使用@Param引用参数 如题报错: For queries with named parameters you ...
- jpa中使用Query判断条件查询
jpa中使用Query判断条件查询 @Query(value = " select m.* from mining_area as m " + " where 1 = 1 ...
- 关于使用JPA中@Query注解传递表名/视图名参数的问题
因碰到需要动态查询不同视图的结果,自己尝试使用@Query注解中传递视图名称参数: @Query("select * from ?1") List<Object> ge ...
- CDH中,执行HIVE脚本表联查权限问题。。
文章来自http://www.cnblogs.com/hark0623/p/4174641.html 转发请注明 有时候执行表联查的时候总会出现没有权限写文件的情况. 这个时候使用sudo -H hi ...
- Srping框架中使用@query注解实现复杂查询
[自己项目代码] @Query("select bean from User bean where bean.org.id=?1 and bean.group.id=?2") pu ...
- JPA 中注解的作用
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA由EJB 3.0软件专家 ...
- 使用JPA中@Query 注解实现update 操作
spring使用jpa进行update操作主要有两种方式: 1.调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.sav ...
- 通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句
参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...
- 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法
实体如下: IntegralGoods 积分商品 IntegralGoodsImg 积分商品图片 ShelfLog 积分商品自动上架记录 IntegralGoods :IntegralGoodsIm ...
随机推荐
- 去除提示“Chrome正在受到自动软件的控制”
现象:用selenium启动浏览器出现‘Chrome正在受到自动软件的控制’ 解决办法:在启动浏览器前加上如下配置 # 加启动配置 option = webdriver.ChromeOptions() ...
- 2.单核CPU是如何实现多进程的?
单核cpu之所以能够实现多进程,主要是依靠于操作系统的进程的调度算法 如时间片轮转算法,在早期,举例说明:有5个正在运行的程序(即5个进程) : QQ 微信 有道词典 网易云 ...
- Linux shell脚本笔记
shell 命令解释器 是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的shell Linux 启动过程: BIOS -> MBR -> BootLo ...
- java中常见的字符串API
java中定义了String类来封装字符串,并提供一系列的操作字符串的方法,他们都位于java.lang包下. package Main; public class String01 { public ...
- JAVA netty 简单使用
实现一个功能,客户端和服务器 轮流对一个数加+1 服务器 public class Server { public static void main(String[] args) { NioEvent ...
- 部署acfs笔记
acfs问题分析 环境描述 某电力项目创建了两个磁盘组,分别是OGGEXT和OGGREP,利用这两个磁盘组划分了两个acfs文件系统,之后,cloud监控就一直在报磁盘空间不足,但是这两个文件系统的使 ...
- 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP)
wechat github 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP) 概述 公众号开发是痛苦的,痛苦在好多问题开发者文档是没有提到的,是需要你猜的. 在开发过程中 ...
- Django中ORM的优化
1. exists( ) 什么时候用 count( ) 和 len( )什么时候合适, 用values( )或values_list( )只取需要的列的数据 iterator()对数据对象生成迭代器, ...
- Leetcode Tags(13)Tree
1.前序.中序.后序递归方式遍历二叉树 public void preOrderRecur(Node T) { if (T != null) { System.out.print(T.val + &q ...
- 设计模式(十七)Observer模式
在Observer模式中,当观察对象的状态发生变化时,会通知给观察者.Observer模式适用于根据对象状态进行相应处理的场景. 首先看一下示例程序的视图. 然后用实际代码来理解这种设计模式. pac ...