我正在使用hibernate与Postgres数据库交互。我试图进行的查询选择尚未分配给分支的产品。通过branch_product
表,产品和分支之间存在多对多关系。我可以用原生SQL编写查询:
SELECT p.*
FROM product p
LEFT JOIN (
SELECT bp.product_id
FROM branch_product bp
WHERE bp.branch_id = ?
) AS sub ON sub.product_id = p.id
WHERE p.tenant_id = ?
AND sub.product_id IS NULL;
查询的工作方式是通过构建sub
表,该表包含分支中所有产品的行。然后,Product中未与sub
连接的任何行都是我想要的-尚未添加到分支的产品。
我还没有弄清楚如何使用jpql来表达这个查询。如果我使用本机查询,那么hibernate Entities就不能很容易地加载,因为没有为列设置jsonMap。如果我可以使用jpql来进行这个查询,那将保存很多工作。
1条答案
按热度按时间eufgjt7s1#
所以在Hibernate 6中,当然可以这样写HQL:
我相信这和你的问题很相似
但是我不明白这样做有什么意义。在我看来,你的查询可以很容易地被重写,不使用子查询。
在我的例子中,我会写:
在你的SQL查询中,我会写:
也许我错过了一些东西,我不明白你的子查询有什么目的。