【问题标题】:Join multiple tables with one JPQL query使用一个 JPQL 查询连接多个表
【发布时间】:2017-10-23 23:45:42
【问题描述】:

我得到了这个我想在 JPQL 中创建为查询的 sql 查询,但我做错了。我在 QuestionAnswers 和 QuizQuestions 之间建立了多方关系:

SQL:

SELECT quizName, question, answer FROM Quiz 
JOIN QuizQuestions on Quiz.quizId = QuizQuestions.Quiz_QuizId 
JOIN QuestionAnswers on QuizQuestions.questionId = QuestionAnswers.question_questionId 
WHERE quiz.quizId = 1;

JPQL 查询:

Query query = entityManager.createQuery("SELECT q.quizName, f.question, a.answer FROM Quiz q, QuizQuestions f, QuestionAnswers a LEFT JOIN QuestionAnswers ON f.questionId=a.question.questionId");

我在 Intellij 中遇到语法错误。

可能有什么问题?

我正在使用 EclipseLink

编辑 只需一个连接就可以解决它:

Query query = entityManager.createQuery("SELECT f.quiz.quizName FROM QuizQuestions f JOIN QuestionAnswers qa WHERE f.questionId = qa.question.questionId");

【问题讨论】:

  • 嗯,这不是 JPQL 中连接的工作方式。阅读一些关于 JPQL 的文档。例如,只需在谷歌上搜索“JPQL 连接”就会导致 thisthis,它们解释了连接的工作原理。
  • 谢谢。我也看到了这些链接。但仍然有正确的问题关于如何编辑我的查询的任何提示?谢谢
  • 嗨!向我们展示实体 QuizQuestions 和 QuestionAnswers 的代码

标签: java jpa jpql


【解决方案1】:

您可能正在寻找这样的 JPQL:

SELECT quiz.name, quizquestion.question, questionasnswer.answer FROM Quiz quiz
JOIN quiz.quizQuestions quizquestion
JOIN quizquestion.questionAnswers questionasnswer
WHERE quiz.id = 1;

我会用qa.question.questionId (tableA.tableB.column) 驱逐解决方案,因为 JPA 框架并不总是从中生成好的 SQL。始终明确 JPQL 中的 JOIN。

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2018-10-17
    相关资源
    最近更新 更多