解决方案 »

  1.   

    hql和sql的写法很类似的。可以写成如下: 
    select distinct t1.id 'weibo id', t1.content '微博内容',t3.evaluation '微博评论'
    from Weibo t1,ParticipateUser t2,ParticipateUserEvaluateion t3
    where t2.weibo=t3.weibo
    and t2.weibo=t1.id有个疑问:
    private int isRead; //是否查看过该微博 这个返回要求有点奇怪。这不是针对某一个微博帖子的需求,好像是针对用户的需求。
      

  2.   


    是的。我想判断当前用户是否看过这个微博。那应该是在别的地方统计啊,不是在你这个需求里统计啊。
    ?怎么做?我准备ParticipateUser这个表就是统计这个用的。
      

  3.   


    是的。我想判断当前用户是否看过这个微博。那应该是在别的地方统计啊,不是在你这个需求里统计啊。
    ?怎么做?我准备ParticipateUser这个表就是统计这个用的。应该是判断谁查看过这个微博,而不是当前用户是否看过这个微博?一般的业务,都是展现出来当前用户查看过的微博,因为微博数那么多,你没有看过的N多,你还要全部拉出来展示吗(你要把这个拉出来你不是工作量巨大又没有用);或者展示一些你没有看过的热点微博。你想想是不是这个业务逻辑?
      

  4.   


    是的。我想判断当前用户是否看过这个微博。那应该是在别的地方统计啊,不是在你这个需求里统计啊。
    ?怎么做?我准备ParticipateUser这个表就是统计这个用的。应该是判断谁查看过这个微博,而不是当前用户是否看过这个微博?一般的业务,都是展现出来当前用户查看过的微博,因为微博数那么多,你没有看过的N多,你还要全部拉出来展示吗(你要把这个拉出来你不是工作量巨大又没有用);或者展示一些你没有看过的热点微博。你想想是不是这个业务逻辑?获取微博列表这个接口是给客户端的,每次获取20个微博。我想客户端显示微博时就能直接区分出自己又没有看过这条微博。你说这样做:查询数据时直接返回查看过微博的所有用户,然后客户端显示微博时每条都得自己判断是否在这个用户列表中?我怕这样客户端显示每次都得判断一次,会不流畅。。
      

  5.   


    是的。我想判断当前用户是否看过这个微博。那应该是在别的地方统计啊,不是在你这个需求里统计啊。
    ?怎么做?我准备ParticipateUser这个表就是统计这个用的。应该是判断谁查看过这个微博,而不是当前用户是否看过这个微博?一般的业务,都是展现出来当前用户查看过的微博,因为微博数那么多,你没有看过的N多,你还要全部拉出来展示吗(你要把这个拉出来你不是工作量巨大又没有用);或者展示一些你没有看过的热点微博。你想想是不是这个业务逻辑?获取微博列表这个接口是给客户端的,每次获取20个微博。我想客户端显示微博时就能直接区分出自己又没有看过这条微博。你说这样做:查询数据时直接返回查看过微博的所有用户,然后客户端显示微博时每条都得自己判断是否在这个用户列表中?我怕这样客户端显示每次都得判断一次,会不流畅。。
    是啊,获取微博列表这个接口是给客户端的,每次获取20个微博。这不就相当于热点微博推送服务功能模块吗?推送不是按照统一的推送吗,难道还要判断一下,如果用户看过了这条微博就不推送,没有看过就推送?
      

  6.   


    都推送的,只是不同用户isRead这个字段值会不同。而且客户端想要知道的数据只是判断自己有没有看过这个微博。不需要知道读过该微博的全部用户数据,服务器直接判断给出来不好吗?
      

  7.   


    都推送的,只是不同用户isRead这个字段值会不同。而且客户端想要知道的数据只是判断自己有没有看过这个微博。不需要知道读过该微博的全部用户数据,服务器直接判断给出来不好吗?如果服务器来判断的话,那么就需要动态sql了,因为你每推送给一个用户,就要加一个not exists条件判断,就是判断这条微博是不是被这个用户isRead了。列如:select * from tablename where  not exists (select 1 from ParticipateUser pu where pu.uid=tablename.uid);这种业务你静态的sql搞不定的。
      

  8.   


    谢谢,我用left join on实现了。然后判断字段是否为空,为空就是没有读过的。
    现在纠结2个问题:
    1.现在获取数据、组装数据的逻辑我都是在Dao里面用一条很长很长的sql语句实现的,这样好吗。程序的核心就全部在sql上了。
    2.感觉没怎么用到hibernate可以面对对象这种查询获取数据的优势。
      

  9.   


    谢谢,我用left join on实现了。然后判断字段是否为空,为空就是没有读过的。
    现在纠结2个问题:
    1.现在获取数据、组装数据的逻辑我都是在Dao里面用一条很长很长的sql语句实现的,这样好吗。程序的核心就全部在sql上了。
    2.感觉没怎么用到hibernate可以面对对象这种查询获取数据的优势。1,不是太好的。2,hibernate的优势在于封装了对数据库的操作,让开发人员不必懂sql懂数据库也可以按照java对象的方式来快速开发web应用,而hibernate适合处理比较简单的业务逻辑,你那么复杂的用hibernate真心不太合适,你可以拆分业务逻辑成单条单条的hql语句,组装成java复杂的嵌套对象啊。