2014-02-28 42 views
1

我對jpql不是很熟悉,而且我最近使用sql的經驗是在幾年前。但讓我們試着解釋我想要的。在我目前的應用程序(Jpa/Eclipselink)中,我運行了一些簡單的查詢,但現在我需要一些更復雜的查詢。在JPQL中需要一個複雜(可能加入)查詢的指導

首先是產生「的表達是不是一個有效的條件表達式」當前查詢:

"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" 

你應該得到結構的一些想法,但下面是詳細介紹。這是一個應用程序,以組織各種投票或民意調查。目前我正在寫查詢來計算投票結果(計數答案)。 這裏是一個最小化的ER-圖:

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

用戶可以添加答案(用於多/單選擇)。並設置一個狀態,如果用戶要完成投票(「DONE」):

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

我的查詢應該算給定choiceId,但只適用於已經設定做了投票狀態用戶的所有答案。所以我必須加入2個表格,但他們的連接是相當間接的。有人可能會給一個JPQL查詢嗎?

回答

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)"); 

也請記住,爲您的枚舉集完全限定類名。

+0

正在工作的thx – dermoritz