public CriterionGroup buildCriterionGroup() throws HqlBuildException {
		
		if(this.form == null || this.ruleScheme == null){
			return new CriterionGroup();
		}
		
		/**
		 * 1. 生成CriterionResult
		 */
		CriterionGroup group = new CriterionGroup();
		
		/**
		 * 遍历Form对象所有属性
		 * 顺序是映射文件里面从上到下
		 */
		Iterator<String> it = ruleScheme.keySet().iterator();
		while(it.hasNext()){
			String fieldName = it.next();
			
			try {
				
				//如果是 serialVersionUID 属性就跳过
				if("serialVersionUID".equals(fieldName)){
					continue;
				}
				
				/**
				 * 获取值对象
				 */
				Object value = ReflectUtils.getFormValue(form, fieldName);
				
				/**
				 * 如果 value == null 表示本次查询不对改条件限制
				 */
				if(value==null){
					continue;
				}
				
				/**
				 * 根据field获取Rule对象，并通过rule和value获取CriterionItem对象
				 */				
				CriterionItem item = this.buildCriterionItem(ruleScheme.get(fieldName), value);
				
				/**
				 * 添加CriterionItem 到 CriterionGroup中
				 */
				group.addCriterionNode(item);
			} catch (SecurityException e) {
				e.printStackTrace();
				continue;
			}
		}

		return group;
	}