我想将 sql 查询转换为 jpa 查询。
我的两张 table
看门狗
+---+---------------------+------+
|id |datetime | stid |
+---+---------------------+------+
|1 | 2011-12-12 09:27:24 |1 |
|2 | 2011-12-13 09:27:31 |2 |
|3 | 2011-12-14 09:27:34 |4 |
|4 | 2011-12-14 09:28:21 |2 |
+-----------------------+------+
station
+----+------+
| id | name |
+----+------+
| 1 | x |
| 2 | xx |
| 4 | yy |
| 7 | z |
+----+------+
我的类(class)
public class watchdog{
@OneToOne
@JoinColumn(name = "stid")
private Station station;
...
}
我做了一个sql查询
SELECT wc.stid, st.name
FROM watchdog wc
inner join station st on wc.stid = st.id
inner join (
select wc2.stid, max(wc2.datetime) as max_date_time from watchdog wc2 group by wc2.stid
) ms on wc. stid = ms.stid and wc.datetime = ms.max_date_time
我没有找到任何信息来知道是否可以在 jpa 中执行此操作。
使用 Priyesh 解决方案,我得到了
entityManager.createQuery(sb.toString()) = >目标虚拟机中发生异常:org.hibernate.hql.ast.QuerySyntaxException: 预计加入路径!
SELECT wc
FROM com.xxx.entity.Watchdog wc
join fetch Station st
where wc.datetime = (
select max(wc2.datetime) from com.xxx.entity.Watchdog wc2 where wc.stid = wc2.stid group by wc2.stid
);
与
SELECT wc
FROM watchdog wc
join fetch station st
where wc.datetime = (
select max(wc2.datetime) from watchdog wc2 where wc.station.Id = wc2.station.Id group by wc2.station.Id
);
我没有错误,但我看到 mysql 进程占用了 100% cpu 时间
最佳答案
您可以尝试将条件放在 where 而不是内部联接中,如下所示:
SELECT wc
FROM watchdog wc
join fetch station st
where wc.datetime = (
select max(wc2.datetime) from watchdog wc2 where wc.stid = wc2.stid group by wc2.stid
);
关于mysql - 使用 jpa 进行内连接和子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23954973/