hibernate参数查询问题,50分相送!

BigHill 2004-12-03 12:59:17
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, "%开发部%");,但这样总是有点不好,请问大家有什么更好的办法,解决这个参数查询问题?
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
etiox 2004-12-09
  • 打赏
  • 举报
回复
passwords(name)是正解。
q.setString(0, "开发部");语句中给字符串加上单引号,以及对其他非法字符的过滤都是不可避免的,所以必须像passwords(name)写的那样在调用之前对字符串进行处理。
如果不想做这种处理的话,建议还是使用Hibernate提供的条件查询(Criteria Query)
====
List departmentList = s.createCriteria(Department.class)
.add( Expression.like("Id", "%开发部%") )
.list();
BigHill 2004-12-08
  • 打赏
  • 举报
回复
q.setString(0, "开发部");时,hibernate会把 开发部 这三个字加上引号后 '开发部' 代入SQL语句。
请问有没有办法,使q.setString(0, "开发部");时 开发部 这三个字不用加上引号代入SQL语句中。
passwords 2004-12-06
  • 打赏
  • 举报
回复

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);
}
试下吧,具体怎么该自己看,我随手写的没测过
a10002 2004-12-05
  • 打赏
  • 举报
回复
q.setString(0, "开发部");
q.setString(1, "开发部");

intelcao 2004-12-05
  • 打赏
  • 举报
回复
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);
}

这样行不行?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧