mysql - 使用 jpa 进行内连接和子查询

标签 mysql sql jpa

我想将 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/

相关文章:

php - 多个 if 语句有效,除非值为 null

php - 更新sql表

java - 如果不使用 ORM,那么以 OOP 方式设计应用程序还有什么意义呢?

mysql - 如何计算以下 SQL 代码的时间复杂度?

mysql - 你的 SQL 语法有错误...在 'float)/CAST(rating_count AS float)) as average_rating from document' 附近

找不到 Spring 数据 jpa 存储库属性

JPA:映射 Map<Enum, Entity>

sql - MySQL 是否使用现有索引来创建新索引?

php - laravel 中的 mysqli_connect() 错误,次要版本错误

mysql - 选择没有 FROM 但有多行