一看这个语句,我觉得这样写sql语句太复杂了where条件后有子查询,有distinct关键字,而且还用了那么多的函数,所以会很慢;
建议你用关联查询代替where后面的子查询,

解决方案 »

  1.   

    还有同一where条件用bt.downTime!=null 很多次,我觉得这也是不合理的你应该考虑如何优化这个sql语句
      

  2.   


    一般Hibernate会把相关的关系影射好,所以一般不用在将相关的关系列出
    看了就有很大的问题
    SELECT DISTINCT bt.userId  from Systembooks br,Bookrealtime bt where bt.userId!=null and br.id=bt.bookId and ((bt.dotTime!=null and TO_DAYS(NOW())-TO_DAYS(bt.dotTime) <=7) or (bt.starTime!=null and TO_DAYS(NOW())-TO_DAYS(bt.starTime) <=7) or (bt.stowTime!=null and TO_DAYS(NOW())-TO_DAYS(bt.stowTime) <=7) or (bt.downTime!=null and TO_DAYS(NOW())-TO_DAYS(bt.downTime) <=7)) order by bt.id desc
    要好好改改可以通过执行多个Hiberbate语句,如果不行的话,比如可以将某个子查询的结果存在List中,然后使用 hibernate queryObj.setParamterList("","");
      

  3.   

    可以通过执行多个Hiberbate语句,如果不行的话,比如可以将某个子查询的结果存在List中,然后使用 hibernate queryObj.setParamterList("","");
    我还是赞同上面这位兄弟的看法!你不防试试.
      

  4.   

    谢各位指点,昨晚在家详细看了一下,感觉sql语句写的比较冗余,和4、5楼的想法差不多,今天试一下