我使用的是spring 3.0,我使用的是JqGrid插件。我正在处理搜索功能,它发送一个带有所有搜索条件的json字符串。这是字符串的样子。Hibernate条件查询 - 查询条件
{"groupOp":"AND","rules":[{"field":"firstName","op":"bw","data":"John"},{"field":"lastName","op":"cn","data":"Doe"},{"field":"gender","op":"eq","data":"Male"}]}
如果你看一下“OP”的规则数组内的财产,你会看到它必须要执行的操作。 Jq格有以下操作
['eq','ne','lt','le','gt','ge','bw','bn','in','に”, 'EW', 'EN', 'CN', 'NC']
与
[对应 '等于', '不等于', '少', '小于或等于', '更大','大于或等于','开始于','不以'开始,''在','不在','以'结束','不以'结尾,'包含','不包含']
我打算使用休眠条件搜索来启用搜索功能。为此,我使用Jackson的ObjectMapper将传入的JSON转换为Java。这一切都很好。这是我的代码转换JSON。
public class JsonJqgridSearchModel {
public String groupOp;
public ArrayList<JqgridSearchCriteria> rules;
}
public class JqgridSearchCriteria {
public String field;
public String op;
public String data;
public SimpleExpression getRestriction(){
if(op.equals("cn")){
return Restrictions.like(field, data);
}else if(op.equals("eq")){
return Restrictions.eq(field, data);
}else if(op.equals("ne")){
return Restrictions.ne(field, data);
}else if(op.equals("lt")){
return Restrictions.lt(field, data);
}else if(op.equals("le")){
return Restrictions.le(field, data);
}else if(op.equals("gt")){
return Restrictions.gt(field, data);
}else if(op.equals("ge")){
return Restrictions.ge(field, data);
}else{
return null;
}
}
}
@RequestMapping(value = "studentjsondata", method = RequestMethod.GET)
public @ResponseBody String studentjsondata(@RequestParam("_search") Boolean search ,HttpServletRequest httpServletRequest) {
StringBuilder sb = new StringBuilder();
Format formatter = new SimpleDateFormat("MMMM dd, yyyy");
if(search){
ObjectMapper mapper = new ObjectMapper();
try {
JsonJqgridSearchModel searchModel= mapper.readValue(httpServletRequest.getParameter("filters"), JsonJqgridSearchModel.class);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(Person.class);
Iterator<JqgridSearchCriteria> iterator = searchModel.rules.iterator();
while(iterator.hasNext()){
System.out.println("before");
criteria.add(iterator.next().getRestriction());
System.out.println("after");
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{//do other stuff here}
这就是问题的用武之地。我如何transalate的jqGrid的操作进入冬眠equivelent命令?例如 “CN”应该
criteria.add(Restrictions.like("firstName", myJsonJqgridSearchModel.data));
我做了一些编辑,上面反映了我目前的代码,有没有更好的方法来做到这一点? – Binaryrespawn 2012-04-20 15:54:10