/*
* Find all events in the given month and year.
* @param month - 0-11 (0 = January)
* @param year
*/
  public List findEventsFor(int month, int year) {
  List events = null;
  try {
  startOperation();
  Date firstDay = DateUtils.newDate(month, 1, year);
  Date lastDay = DateUtils.newDate(month + 1, 1, year);
          StringBuffer sql = new StringBuffer();
  sql.append("from Event event where 1=1 and event.startDate >= :firstDay and event.startDate < :lastDay");
  Query query = getSession().createQuery(sql.toString());   query.setParameter("firstDay", firstDay);
  query.setParameter("lastDay", lastDay);
  events =  query.list();
  getTx().commit();
  } catch (HibernateException e) {
  handleException(e);
  } finally {
  HibernateFactory.close(getSession());
  }
  return events;
}如果在创建Query对象之后,在追加sql会有问题?
parameter username does not exist as a named parameter in
原因也很简单,对象创建完成之后再追加的sqlhibernate是不知道的,此种问题有遇到过的吗?麻烦给出解决方案,谢!StringBuffer sql = new StringBuffer();
sql.append("from Event event where 1=1 ");
Query query = getSession().createQuery(q);
if(null != startData && null != lastDay) {
   sql.append("and event.startDate >= :firstDay and event.startDate < :lastDay");
}
query.setParameter("firstDay", firstDay);
query.setParameter("lastDay", lastDay);

解决方案 »

  1.   

    先准备好SQL语句,缓存查询条件,再执行查询!不知道有没有好的解决方案?Map<String, String> mapString = new HashMap<String, String>();
    if(null != map) {
    if(null != map.get("username") && !"".equals(map.get("username"))) {
    queryString.append(" and u.username like :username");
    mapString.put("username", "%" + map.get("username").toString() + "%");
    }
    }
    Query query = hibernateTemplate.getSessionFactory().openSession().createQuery(queryString.toString());
    Set<Entry<String, String>> set = mapString.entrySet();
    Iterator<Entry<String, String>> iter = set.iterator();
    while(iter.hasNext()) {
    Entry<String, String> entry = iter.next();
    String key = entry.getKey();
    String value = entry.getValue();
    query.setString(key, value);
    }
    @SuppressWarnings("unchecked")
    List<User> userList = query.list();
      

  2.   

    你必须要用query吗,不是必须的话,可以用别的方法如:
    StringBuffer sql = new StringBuffer();
          sql.append("from Event event where 1=1 and event.startDate >= ? and event.startDate < ?);List list = this.getHibernateTemplate().find(queryString, new Object[]{firstDay,lastDay});
    不知道行不,可以试一下
      

  3.   

    缓存查询条件,重新准备SQL语句不行吗?