这是我写的代码:
//log和tsyslogs都是TSyslogs对象,
//log是作为参数传进来的TSyslogs类型的对象,实际上log = new TSyslogs();
tsyslogs = log;//拼接字符串
String sQuery = "from TSyslogs ts where ts.logTime between '"+starttime+"' and '"+endtime+"' ";if(null != tsyslogs.getAppName())
sQuery = sQuery + " and ts.appName like '"+tsyslogs.getAppName()+"' ";
if(null != tsyslogs.getLogInfo())
sQuery = sQuery + " and ts.logInfo like '"+tsyslogs.getLogInfo()+"' ";
if(null != tsyslogs.getLogType())
sQuery = sQuery + " and ts.logType like '"+tsyslogs.getLogType()+"' ";
...我的想法是,如果传进来的log是个具体的对象,那么我还要在对查询结果进一步的筛选;
可现在log的相关属性都没有啊,hibernate发出的SQL却是这样的:select tsyslogs0_.ID as ID0_, tsyslogs0_.USER_NAME as USER2_0_, tsyslogs0_.USER_IP as USER3_0_, tsyslogs0_.APP_NAME as APP4_0_, tsyslogs0_.MODULE_NAME as MODULE5_0_, tsyslogs0_.LOG_TYPE as LOG6_0_, tsyslogs0_.LOG_INFO as LOG7_0_, tsyslogs0_.LOG_TIME as LOG8_0_ from mdsws.t_syslogs tsyslogs0_ where (tsyslogs0_.LOG_TIME between '2010-01-01 12:23:01' and '2010-01-02 12:23:12') and (tsyslogs0_.APP_NAME like '') and (tsyslogs0_.LOG_INFO like '') and (tsyslogs0_.LOG_TYPE like '')也就是将上面的sQuery = sQuery + ...三条语句都执行了;这可真令我抓狂...请问各位大侠,这是为什么?PS:我也试过将null换成"",可是行不通,希望哪位大大能告诉小弟,感激不尽啊。

解决方案 »

  1.   

    if(tsyslogs!=null){
       ......
    }
      

  2.   

    if(tsyslogs.getAppName()!=null)
    sQuery = sQuery + " and ts.appName like '"+tsyslogs.getAppName()+"' ";
    if(tsyslogs.getLogInfo()!=null)
    sQuery = sQuery + " and ts.logInfo like '"+tsyslogs.getLogInfo()+"' ";
    if(tsyslogs.getLogType()!=null)
    sQuery = sQuery + " and ts.logType like '"+tsyslogs.getLogType()+"' ";
    这样试试呢
      

  3.   

    if(null != tsyslogs.getAppName() && !"".equals(tsyslogs.getAppName()))
    {
    }
    试试看