型付きクエリを作成したい。
TypedQuery<PubThread> query = em.createQuery(queryString, PubThread.class);
query.setParameter("threadId", threadId);
List<PubThread> otherPubThreads = query.getResultList();
queryString には次の SQL があります (現在、param および static 選択値はありません)。
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
)
String を単純な select: に制限すると、うまくいきますSELECT Distinct(pt2.id), pt2.name FROM pubthread pt2
。JOIN 行を追加するとすぐに文句を言うでしょう。JPAでJOINSを使用して適切にクエリを実行するにはどうすればよいですか? エラーは次のとおりです。
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ON near line 1, column 81 [SELECT pt2 FROM com.brayan.webapp.model.PubThread pt2 JOIN pub_pubthread ppt2 ON pt2.id = ppt2.pubThreads_id ]
間違いなく、条件クエリの方が優れています。私はそれを解決空間の一部として受け入れます。