SSH 문제 및 해결 의 3 SpringSide 3 결함

2814 단어 J2EE 개발
http://code.google.com/p/springside/issues/detail?id=28
[quote] ss3 의 Property Filter 는 where 속성 명 1 like '% 값 1%' or 속성 명 1 을 제공 하지 않 은 것 같 습 니 다.
like '% 값 2%' or 속성 명 1 like '% 값 3%' 이런 경우
이런 상황 이 발생 하면 어떻게 실현 해 야 합 니까? 자신 이 쓰 면 page 패 키 지 를 버 려 야 합 니 다 [/ quote]
제 프로젝트 도 이 문제 에 부 딪 혔 습 니 다. SpringSide 은 좋 은 해결 방안 을 제공 하지 않 았 습 니 다. 그 이 유 는 Property Filter 의 property Value 입 니 다. match Type 은 데이터 형식 으로 정 의 를 내리 지 않 았 고 property Names 는 배열 입 니 다. 이 는 '또는' (OR) 작업 시간 값 과 일치 해 야 합 니 다.
나의 방법 은:
		// 1. '   ' ' ' '  '   
Disjunction disjunction = Restrictions.disjunction();
//
Criterion neCriterion = buildPropertyFilterCriterion("workCenterId",
workCenterId, java.lang.Integer.class,
PropertyFilter.MatchType.NE);
//
Criterion nullCriterion = buildPropertyFilterCriterion("workCenterId",
null, java.lang.Integer.class, PropertyFilter.MatchType.NULL);
disjunction.add(neCriterion);
disjunction.add(nullCriterion);
finalList.add(disjunction);
// 2.
List criterionList = this.buildCriterions(filters);
if (criterionList!=null && !criterionList.isEmpty()) {
finalList.addAll(criterionList);
}
Criterion[] criterions = finalList
.toArray(new Criterion[finalList.size()]);
return findPage(page, criterions);

예 를 들 어 프로젝트 진도 관계 로 ss 를 확장 하지 않 았 기 때문에 이런 관계 에 대해 자신 이 비교적 딱딱 한 인 코딩 을 했다.
	/**
*
*
* @param filters
* @return
*/
protected List buildCriterions(final List filters) {
List criterionList = new ArrayList();
for (PropertyFilter filter : filters) {
if (!filter.isMultiProperty()) { // There is only one property
// need to compare the
// situation.
Criterion criterion = buildPropertyFilterCriterion(filter
.getPropertyName(), filter.getPropertyValue(), filter
.getPropertyType(), filter.getMatchType());
criterionList.add(criterion);
} else {// Contain multiple attributes need to compare the situation
// to carry out or deal with.
Disjunction disjunction = Restrictions.disjunction();
for (String param : filter.getPropertyNames()) {
Criterion criterion = buildPropertyFilterCriterion(param,
filter.getPropertyValue(),
filter.getPropertyType(), filter.getMatchType());
disjunction.add(criterion);
}
criterionList.add(disjunction);
}
}
return criterionList;
}

좋은 웹페이지 즐겨찾기