传递一个map集合 然后我来拼凑sql 语句进行查询。
拼凑是没什么问题 倒是动态绑定参数上 总是报异常 应该是没绑定上的感觉:
org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [] [SELECT * FROM user WHERE 1 = 1 AND userId = ? AND name = ? ]
sql 打印出来是SELECT * FROM user WHERE 1 = 1 AND userId = ? AND name = ? 也并没用错
举个例子:
Map map = new HashMap();
map.put("userId",1);
map.put("name","kitty");
- Java code
public List getListForSQL(Map<String,Object> map )throws Exception{ Session session = SessionFactoryUtils.getSession(hibernateTemplate.getSessionFactory(), true); String sql =" select * from user where 1=1 "; //map key 有 userId(必有) name(可选) password(可选) age(可选) 等.. int userId = (Integer)map.get("userId")==null ? 0 :(Integer)map.get("userId"); String name = (String )map.get("name"); String password = (String)map.get("password"); String age = (String)map.get("age"); if(userId != 0 ){ sql += " and userid = ? ";}else{ if(map.containsKey("userid ")){ map.remove("userid "); }}if(name != null && name.length() > 0){ sql += " and name = ? ";}else{ if(map.containsKey("name ")){ map.remove("name "); }} Query query = session.createSQLQuery(sql).setProperties(map);// map传递进去 参数也对, 好像是没绑定?上List list = query.list();if(session != null){ session.close();}return list;}
因为没有实体对应表(是母表拆分N多表) 不能使用hql 只能使用原生sql了
求助各位hibernate 写原生sql 动态拼凑sql语句的达人、
------解决方案--------------------
这问题是set没有生效
主要是没有对应上吧
query.setInteger(arg0, arg1);这个是单个对象(属性)