SSH問題及び解決の三つのSprigSide 3欠陥
2600 ワード
http://code.google.com/p/springside/issues/detail?id=28
[quot]s 3のPropertyFilterはwhere属性名1 like'%値1%を実現するために提供されていないようです.or属性名1
like'%値2%'or属性名1 like'%値3%'という場合の
このような状況に遭遇したらどうやって実現しますか?自分で書くとパッケージをなくします.
私のプロジェクトもこの問題に遭遇しました.SpringSideは確かにProptyFilterのpropertyValueのために良い解決策を提供していません.matchTypeはデータタイプを使っていません.
私のやり方は:
[quot]s 3のPropertyFilterはwhere属性名1 like'%値1%を実現するために提供されていないようです.or属性名1
like'%値2%'or属性名1 like'%値3%'という場合の
このような状況に遭遇したらどうやって実現しますか?自分で書くとパッケージをなくします.
私のプロジェクトもこの問題に遭遇しました.SpringSideは確かにProptyFilterのpropertyValueのために良い解決策を提供していません.matchTypeはデータタイプを使っていません.
私のやり方は:
// 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;
}