http://code.google.com/p/springside/issues/detail?id=28
引用
ss3中的PropertyFilter 好像没提供实现where 属性名1 like '%值1%' or 属性名1
like '%值2%' or 属性名1 like '%值3%' ...这种情况的
请问遇到这种情况该怎么实现呢,如果自己写就要丢掉page封装了
我的项目也遇到这个问题, 而SpringSide确实没有提供好的解决方案,原因是PropertyFilter中的propertyValue, matchType没有使用数据类型进行声明定义, 而propertyNames是数组, 这就导至了, '或'(_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<Criterion> 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<Criterion> buildCriterions(final List<PropertyFilter> filters) {
List<Criterion> criterionList = new ArrayList<Criterion>();
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;
}
分享到:
相关推荐
### Springside3与传统SSH(Struts + Spring + Hibernate)的区别 #### 1. 数据库设计 在数据库设计方面,Springside3采用了一种更为现代化的方法,这体现在其对实体对象、DAO对象的设计上。它更加侧重于利用Java ...
三、springside3的jar包使用 1. **依赖管理**:springside3的jar包可以作为项目的依赖引入,通过Maven的pom.xml文件配置,可以方便地管理和更新版本。 2. **模块引用**:根据实际需求,可以选择性地引入springside...
《SpringSide3:全方位探索Java开发的利器》 SpringSide3是Java开发领域的一个重要参考资料,它是由知名开发者Calvin创建并维护的项目,旨在为Java开发者提供一套完整的Spring框架学习与实践指南。SpringSide3不仅...
在本次讨论中,我们将深入探讨springside3-core-3.3.4.jar这一核心组件,它是SpringSide 3项目的基石,包含了项目的核心功能和模块。 1. **SpringSide 3概述**: SpringSide 3 是由中国的Java社区开发的一个开源...
1. **额外框架集成**:此扩展包可能包含了对其他第三方库的集成,如缓存管理(如Ehcache)、数据验证(如Hibernate Validator)或消息队列(如RabbitMQ),进一步丰富了SpringSide3的功能。 2. **模板引擎集成**:...
SpringSide3框架,SpringSide3框架SpringSide3框架SpringSide3框架
springside3-core-3.2.2
《SpringSide3 完整项目实例详解》 SpringSide 是一个开源的 Java 开发框架,其版本3(SpringSide3)是基于 Spring Framework 的企业级应用开发平台,它旨在简化 Spring 的使用,提供清晰的实践指导,使得开发者...
springside3-extension-3.3.4.jar
springside3-core-3.3.4.jar
springside3-core-3.3.4.jar
"ssh3.3"这个文件名暗示了SpringSide 3.3可能集成了Struts2、Hibernate和Spring,也就是常说的SSH框架。这三个框架的整合能够实现高效的MVC开发,Struts2处理请求和展示视图,Hibernate负责持久化操作,Spring则...
### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...
SpringSide3开发环境mini-web项目_3 一共三个压缩包: http://download.csdn.net/source/1725011 http://download.csdn.net/source/1725015 http://download.csdn.net/source/1725311
《深入剖析springside3-core-3.0.4源码》 springside3-core-3.0.4是一款基于Spring框架的轻量级Java开发工具包,它旨在简化企业级应用的开发过程,提供了一系列实用的工具类、配置模块和示例代码。这个源码包对于...
《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...