好了,所以我有几个表JPQL结果不是我想要的
- 投票
- 大赛
- ContestSegment
- ContestRegistration
- Submittable
- 用户
的关系髋关节是可以通过创建比赛注册将提交表提交给比赛,该比赛注册与比赛相关联的比赛段相关联。
表决具有用户和到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;
}
但是,当我回来,不管我插上,我总是获得真正的回报(意味着我已经投了票)。例如,我已经参加了第一场比赛的投票,但是我没有投票参加第二场比赛。如果我插入比赛#2的价值,那么我仍然会得到真正的回报。我对JPQL相当陌生,所以你提供的任何帮助都会很棒!谢谢!
这做到了。谢谢! –