2016-06-07 19 views
1

我有两个对象Java的休眠:传递当前行的id子查询

Post { 
    long id 
    String post 
    Date lastUpdate 
} 

Tracker { 
    User user 
    Post post 
    Date viewed 
} 

UserPost是复合IDS的Tracker

在查询Post我想弄清楚如果User已经阅读最新的更新Post

所以SQL应该看起来像这样:

select count(*) as y0_ 
from nb_post AS this_ 
where (other_conditions) 
    or this_.lastUpdate > (select t_.viewed as y0_ from nb_post_tracker t_ where t_.post=this_.post)) 

我的Criteria由于other_conditions部分,必须在Post。有没有办法通过DetachedCriteriaSubQuery通过当前行的post.id

+0

当事情变得与Hibernate变得复杂时,你不必一直试图弄清楚如何让Criteria做你想做的事情。你可以使用直接的SQL查询('Session.createSQLQuery()')。您仍然可以将实体添加到查询中,以便自动填充结果。 – markbernard

+0

我可以只添加这部分作为查询吗? 'this_.lastUpdate>(从nb_post_tracker t_选择t_.viewed as y0_,其中t_.post = this_.post' – MandarK

回答

0

根据Mark的建议,我简单地写了一些简单的旧SQL查询。 如果在Hibernate中可能有一些OOB机制提供了多对多映射实体并且程序员想要加入这两个实体的情况,那将会非常棒。