hibernate参数查询问题,50分相送!
1.出错代码:
s = null;
try {
s = getSession();
Query q = s.createQuery("from Department as department where department.Id like '%?%'");
q.setString(0, "开发部");
return q.list();
} finally {
closeSession(s);
}
2.我已经发现了问题所在,但是不知如何解决。
调试后发现问题主要是...like '%?%'中,我用了单引号,如果我直接写...like '%开发部%'并执行,是正常的。
可能是q.setString(0, "开发部");时,自动把 开发部 加上引号变成了"开发部",然后再代进?中,变成...like '%"开发部"%',所以出错。
我想了一下,解决办法可以是...like ?,然后q.setString(0, "%开发部%");,但这样总是有点不好,请问大家有什么更好的办法,解决这个参数查询问题?
问题点数:0、回复次数:5Top
1 楼intelcao(网址)回复于 2004-12-05 02:35:23 得分 0
s = null;
try {
s = getSession();
Query q = s.createQuery("from Department as department where department.Id like :department");
q.setString("department", "'%开发部%'");
return q.list();
} finally {
closeSession(s);
}
这样行不行?Top
2 楼a10002(A万零贰)回复于 2004-12-05 17:55:37 得分 0
q.setString(0, "开发部");
q.setString(1, "开发部");
Top
3 楼passwords(name)回复于 2004-12-06 13:52:20 得分 0
try {
s = getSession();
String HQL_QUERY="from Department as department where department.Id like ?";
List list = s.find(HQL_QUERY, "%开发部%", Hibernate.STRING);
return q.list();
} finally {
closeSession(s);
}
试下吧,具体怎么该自己看,我随手写的没测过
Top
4 楼BigHill(山河水)回复于 2004-12-08 11:46:01 得分 0
q.setString(0, "开发部");时,hibernate会把 开发部 这三个字加上引号后 '开发部' 代入SQL语句。
请问有没有办法,使q.setString(0, "开发部");时 开发部 这三个字不用加上引号代入SQL语句中。
Top
5 楼etiox(小乙)回复于 2004-12-09 09:40:40 得分 0
passwords(name)是正解。
q.setString(0, "开发部");语句中给字符串加上单引号,以及对其他非法字符的过滤都是不可避免的,所以必须像passwords(name)写的那样在调用之前对字符串进行处理。
如果不想做这种处理的话,建议还是使用Hibernate提供的条件查询(Criteria Query)
====
List departmentList = s.createCriteria(Department.class)
.add( Expression.like("Id", "%开发部%") )
.list();Top




