【发布时间】:2011-06-17 10:17:03
【问题描述】:
我对 SQL 相当熟悉,但对 Java Persistence API 非常陌生。我通过 Play Framework 使用 JPA。
如果可以的话,我想将以下 MySql 查询转换为纯 JPA 代码:
SELECT a.id, b.id
FROM Rankable a
INNER JOIN Rankable b on a.id < b.id
WHERE
a.category_id = ? AND b.category_id = ?
AND NOT EXISTS (
SELECT *
FROM Comparison c
WHERE c.lower in (a.id, b.id))
AND NOT EXISTS (
SELECT *
FROM Comparison c
WHERE c.higher IN (a.id, b.id))
ORDER BY a.id * rand()
LIMIT 1;
此查询的目的是从 Rankable 表中选择两行,但确保此特定对不存在于比较表中。
从 Play/JPA 调用这样一个有点复杂的查询的最佳方法是什么?
【问题讨论】:
-
乍一看,查询看起来与 JPA 中的查询几乎相同。我看到的唯一值得怀疑的是“rand()”和“LIMIT”。自然“?”必须用另一种参数语法(:param1等)替换。除此之外还有什么问题?
-
好的,我可以尝试找出 rand() 和 limit 的 JPA 等价物是什么。另一个问题是 - 当我运行这个 JPA 查询(使用 JPA.em().createQuery(query))时,我如何提取结果(因为这些行不会对应于现有的类)?
-
查询中
ORDER BY a.id * rand()的目的是什么?
标签: java mysql hibernate jpa playframework