【问题标题】:Need guidance with a complicated (probably join) query in JPQL需要 JPQL 中复杂(可能是连接)查询的指导
【发布时间】:2014-02-28 10:39:58
【问题描述】:

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

您应该对结构有所了解,但这里有详细信息。这是一个组织各种投票或民意调查的应用程序。目前我正在编写查询来计算投票结果(计数答案)。 这是一个最小化的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 的所有答案,但仅适用于已为投票设置状态 DONE 的用户。所以我必须加入 2 个表,但它们的连接是相当间接的。有人可以为此提供 JPQL 查询吗?

【问题讨论】:

    标签: sql jpa 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)");
    

    还要记住为您的 Enum 设置完全限定的类名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多