需要在JPQL中使用复杂(可能是连接)查询的指导

时间:2014-02-28 10:39:59

标签: sql jpa jpql

我对jpql并不是很熟悉,而且我几年前使用sql的经历也是如此。但是,让我们试着解释一下我想要的东西。在我目前的应用程序(Jpa / Eclipselink)中,我运行了一些简单的查询,但现在我需要一些更复杂的查询。

首先产生“表达式不是有效条件表达式”的当前查询:

"Select count(a) From UserState u "
+ "Where u.state =  UserVotingState.DONE "
+ "And a.choice.choiceID = :p "
+ "Join AnswerEntity a.choice.question.voting.votingID  u.voting.votingID"

您应该了解结构,但这里有详细信息。这是一个组织各种投票或民意调查的应用程序。目前我正在编写查询以计算投票结果(计数答案)。 这是一个最小化的图表:

voting 1<->n question 1<->n choice 1<->n answer(one per userId)

用户可以添加答案(多个/单个选项)。如果用户想要完成投票(“完成”),则设置一个州:

voting 1<->n userState (has userId, votingId and State)

我的查询应该计算给定choiceId的所有答案,但仅限于已为投票设置了状态DONE的用户。所以我必须加入2个表,但它们的连接是相当间接的。有些人可以为此提供JPQL查询吗?

1 个答案:

答案 0 :(得分:1)

使用子选择尝试这个:

em.createQuery("SELECT count(a) FROM AnswerEntity a WHERE a.choice.choiceID = :p "
                    + "AND a.userId IN "
                    + "(SELECT us.userId FROM UserState us WHERE us.state = com.company.model.UserVotingState.DONE)");

另请注意为Enum设置完全限定的类名。