gpt4 book ai didi

java - 如何在类型查询中制定 JOIN?

转载 作者:行者123 更新时间:2023-11-29 05:38:21 25 4
gpt4 key购买 nike

我想创建一个类型化查询。

TypedQuery<PubThread> query = em.createQuery(queryString, PubThread.class);
query.setParameter("threadId", threadId);
List<PubThread> otherPubThreads = query.getResultList();

在queryString中是下面的SQL(目前没有param和静态选择值)

SELECT pt2 FROM pubthread pt2   
JOIN pub_pubthread ppt2 ON pt2.id = ppt2.pubThreads_id
JOIN pub p2 ON ppt2.pups_id = p2.id
JOIN pubcategory pc2 ON p2.pubCategoryId = pc2.id
WHERE pt2.id != 1 and EXISTS (
SELECT DISTINCT(pt.id)
FROM pubthread pt
JOIN pub_pubthread ppt ON pt.id = ppt.pubThreads_id
JOIN pub p ON ppt.pups_id = p.id
JOIN pubcategory pc ON p.pubCategoryId = pc.id
WHERE pc2.id = pc.id and pt.id = 1
)

它确实有效,如果我将字符串限制为一个简单的选择:SELECT Distinct(pt2.id), pt2.name FROM pubthread pt2。只要我向它添加 JOIN 行,它就会提示。您如何在 JPA 中使用 JOINS 正确查询?错误是:org.hibernate.hql.internal.ast.QuerySyntaxException:意外 token :在第 1 行附近,第 81 列 [SELECT pt2 FROM com.brayan.webapp.model.PubThread pt2 JOIN pub_pubthread ppt2 ON pt2.id = ppt2.pubThreads_id ]

毫无疑问,标准查询会更好。我接受它作为解决方案空间的一部分。

最佳答案

当您调用 createQuery 时,您必须编写 HQL 而不是 SQL(您的 queryString 不是 HQL)。
在 HQL 中,您必须根据映射实体连接对象。
如果您仍然需要 SQL 查询,请使用 createNativeQuery 方法。
参见 documentation关于如何创建 HQL 查询。

关于java - 如何在类型查询中制定 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18639065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com