我编写了一个 SQL 查询,它基本上从多个表中进行选择,以确定哪些表具有自特定日期以来创建的行。我的 SQL 看起来像这样:
SELECT widget_type FROM(
SELECT 'A' as widget_type
FROM widget_a
WHERE creation_timestamp > :cutoff
UNION
SELECT 'B' as widget_type
FROM widget_b
WHERE creation_timestamp > :cutoff
) types
GROUP BY widget_type
HAVING count(*)>0
这在 SQL 中运行良好,但我最近发现,虽然 JPA 可能使用联合来执行“每类表”多态查询,但 JPQL 不支持查询中的联合。所以这让我想知道 JPA 是否有替代方案可以用来完成同样的事情。
实际上,我会查询十几个表,而不仅仅是两个,所以我想避免单独查询。出于可移植性的原因,我还想避免执行本机 SQL 查询。
在我上面链接的问题中,有人询问映射到 widget_a 和 widget_b 的实体是否属于同一继承树。是的,他们是。但是,如果我从他们的基类中选择,我不相信我会有办法为不同的子实体指定不同的字符串常量,对吗?如果我可以选择实体的类名而不是我提供的字符串,那也可能符合我的目的。但我也不知道这是否可能。想法?