我对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查询吗?
答案 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设置完全限定的类名。