我想在实体中获取此SQL查询的结果:
SELECT * FROM thethreads t
LEFT JOIN thread_votes tv
ON t.idthread=tv.thread
AND tv.from_user like "currentUser";
请注意,联接的结果不是我的线程表的一部分:
我试过这个:
private static final String SELECT_NEWEST_THREADS = "Select t From Thethread t LEFT JOIN FETCH t.threadcurrentUserVote tv WHERE tv.user1=:currentUser ORDER BY t.datePosted";
我已将此添加到我的Thethread实体(我的表中不是列):
@OneToOne
private ThreadVote threadcurrentUserVote;
但我收到错误:Unknown column 't1.THREADCURRENTUSERVOTE_id_votes_thread' in 'field list'
目的是查看访问某个帖子的用户是否已经投票。
答案 0 :(得分:1)
如果我理解得很好,那么每个Thethdread都有很多ThreadVote,并且您正试图找出是否存在来自已知用户的线程投票。
因此,不要定义您提到的一对一,而是将其添加到ThreadVote
实体
@ManyToOne
@JoinColumn(name="thread")
private Thethread thread;
假设您有一个关联ThreadVote - >名为user1
的用户代表 from_user 。下一个查询获取由当前用户
select t
from ThreadVote tv join tv.thread t
where tv.user1 = :currentUser
order by t.datePosted
修改强>
我有点懒,但您也可以将下一个映射添加到Thethread
实体中以使关联双向
@OneToMany(的mappedBy = “线程”)
私人投票;
然后下一个查询得到一对thdread
和一个指示当前用户是否已投票选择了该线程的vaule
select t,
case
when ( tv is not empty and :currentUser in tv.user1 ) then TRUE
else FALSE
end
from Thethread t left outer join t.votes tv
order by t.datePosted
我不确定何时的条件表达式是否正确,因为它使用了收集路径。如果它导致任何问题,您可以用一些有用的子查询替换它