以前没有做过这种MVC框架下的组合查询,请问谁做过这种组合查询的例子,望给予指导。
帮看一下我下面的代码是不是有问题:
QueryExpertInfo  是一个模型类,我把页面获取的查询数据都放在这个类里了。
public List queryExpertInfoByAll(QueryExpertInfo queryExpertInfo) throws Exception
{
HibernateTemplate ht = new HibernateTemplate(sessionFactory);
List list =ht.find("select a from AbroadExpert a where a.personalInfo.sex=? and a.personalInfo.country.id=? " +
"and a.personalInfo.nation.id=? and a.personalInfo.religion.id=? and a.personalInfo.firstLanguage.id=? " +
"and a.personalInfo.secondLanguage.id=? and a.personalInfo.degree.id=?  and a.personalInfo.speciality.id=? " +
"and a.personalInfo.mainSearch.mainSearchFirst.id=? and a.personalInfo.mainSearch.mainSearchSecond.id=? and a.personalInfo.mainSearch.mainSearchThird.id=? " +
"and a.employedInfo.expertClass.expertClassOne.id=? and a.employedInfo.expertClass.expertClassTwo.id=? " +
"and a.personalInfo.title.id=? and a.personalInfo.expertOrg.id=? and a.resume.work.id=? and a.resume.status.id=? " +
"and a.employedInfo.employedState.id=? and a.employedInfo.expertField.id=? and a.awardResult.awardLevel.id=? " +
"and a.awardResult.awardClassOne.id=? and a.awardResult.awardClassTwo.id=? and and a.employedInfo.orgProperty.id=? " +
"and a.inChinaHistoryInfo.jobEvaluation.id=?"
, new Object[]{queryExpertInfo.getSex(),queryExpertInfo.getCountryId(),
queryExpertInfo.getNationId(),queryExpertInfo.getReligionId(),queryExpertInfo.getFirstLanguageId(),
queryExpertInfo.getSecondLanguageId(),queryExpertInfo.getDegreeId(),queryExpertInfo.getSpecialityId(),
queryExpertInfo.getMainSearchFirstId(),queryExpertInfo.getMainSearchSecondId(),queryExpertInfo.getMainSearchThirdId(),
queryExpertInfo.getExpertClassOneId(),queryExpertInfo.getExpertClassTwoId(),
queryExpertInfo.getTitleId(),queryExpertInfo.getExpertOrgId(),queryExpertInfo.getWorkId(),queryExpertInfo.getStatusId(),
queryExpertInfo.getEmployedStateId(),queryExpertInfo.getExpertFieldId(),queryExpertInfo.getAwardLevelId(),
queryExpertInfo.getAwardClassOneId(),queryExpertInfo.getAwardClassTwoId(),queryExpertInfo.getOrgPropertyId(),
queryExpertInfo.getJobEvaluationId()});
return list;
}

解决方案 »

  1.   

    笨办法一个:
    String sql="select a from AbroadExpert a where 1=1";
    ArrayList<Object> lst = new ArrayList<Object>();
    //不为空的把条件和参数加进去
    if(queryExpertInfo.getSex()!=null&&!queryExpertInfo.getSex().equals("")){
        sql+= "and a.personalInfo.sex=?";
        lst.add(queryExpertInfo.getSex());
    }
    if(.....)一个个加下去。
    最后
    List list =ht.find(sql,lst.toArray());.......hib不懂,只会这个,楼主看看有没有用吧。
      

  2.   

      sql+= "and a.personalInfo.sex=?"; 
     打快了,,, 第一个双引号后面加个空格,否则连起来就不是一句sql了。