好的,所以我有几张桌子
- 投票
- 比赛
- 比赛环节
- 比赛报名
- 可提交
- 用户
关系是可以通过创建与 ContestSegment 相关联的 ContestRegistration 将 Submittable 提交给竞赛,该 ContestSegment 与 Contest 相关联。
投票具有用户和对投票相关的 ContestRegistration 的引用。
很简单。
现在,我的想法是我想使用一个 RESTful 服务来检查我是否已经在比赛中对其中一个 ContestRegistrations 进行了投票。
除了预期的结果外,一切正常。
我正在运行的 JPQL 如下所示:
SELECT DISTINCT v
FROM Vote v, Contest c
JOIN v.user vu
LEFT JOIN c.segments cs
LEFT JOIN cs.registrations csr
LEFT JOIN csr.votes csrv
WHERE vu.id = :userId
AND cs.beginDate < CURRENT_TIMESTAMP
AND cs.endDate > CURRENT_TIMESTAMP
AND c.id = :contestId
该方法如下所示:
public Boolean hasUserVoted(User user, Contest contest){
StringBuffer query = new StringBuffer()
.append("SELECT DISTINCT v from Vote v, Contest c ")
.append("JOIN v.user vu LEFT JOIN c.segments cs LEFT JOIN cs.registrations csr LEFT JOIN csr.votes csrv ")
.append("WHERE vu.id = :userId ")
.append(" ")
.append("AND cs.beginDate < CURRENT_TIMESTAMP AND cs.endDate > CURRENT_TIMESTAMP AND c.id = :contestId ");
Boolean hasVoted = true;
try{
Vote vote = (Vote)entityManager.createQuery(query.toString())
.setParameter("userId", user.getId())
.setParameter("contestId", contest.getId()).getSingleResult();
}catch(NoResultException nre){
hasVoted = false;
}
return hasVoted;
}
但是当我回来时,无论我插入什么,我总是得到一个真正的支持(意味着我已经投票了)。例如,我对竞赛#1 进行了投票,但我没有对竞赛#2 进行投票。如果我插入竞赛#2 的值,那么我仍然会得到真正的回报。我对 JPQL 还很陌生,所以你能提供的任何帮助都会很棒!谢谢!