hibernate 模糊查询语句出错

babi_java2008 2008-06-17 12:19:08
我有一个方法对表workersinfo中的姓名,职位进行模糊查询,方法如下
public class AAAA{
public List testfindby(String name, String posts) {
Query query = this.getSession()
.createQuery("form com.system.bean.Workersinfo as t where t.name like :name and t.posts like :posts ");
query.setString("name", "%" + name + "%");
query.setString("posts", "%" + posts + "%");
return query.list();
}
}

对该方法进行测试,我现在要查询姓陈的人的记录,主要内容如下:

AAAA a = new AAAA();
List list = a.testfindby("陈","");

报错信息如下:
org.hibernate.hql.ast.QuerySyntaxError: unexpected token: form near line 1, column 1 [form com.system.bean.Workersinfo as t where t.name like :name and t.posts like :posts ]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:63)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:215)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.system.DAO.WorkersinfoDAO.testfindby(WorkersinfoDAO.java:370)
at com.system.service.WorkersinfoService.fi(WorkersinfoService.java:60)
at com.system.service.test.test.test(test.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: line 1:1: unexpected token: form
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:156)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:209)
... 29 more

我哪里错了呀,如何解决呀~~~~请高手指教!
...全文
421 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidjanhao 2010-05-23
  • 打赏
  • 举报
回复
字符串的模糊查询与非模糊查询需要用单引号''把字符串包围起来才不会把报错
whetu 2008-06-17
  • 打赏
  • 举报
回复
眼花了....我上面说的不对。
应该是这样:
你在hql里用的是politicallorsc ,而你定义的Workersinfo 中使用的是politicallandsc。
hql里的属性应该和定义的bean里的属性名保持一致。
whetu 2008-06-17
  • 打赏
  • 举报
回复
当我把查询方法中的"与关系"(ang)变成"或关系"(or)时他就报错了,错误信息如下:
java.lang.IllegalArgumentException: Parameter politicallandsc does not exist as a named parameter in [from com.system.bean.Workersinfo as t where t.worksno like :worksno or t.name like :name or t.sex like :sex or t.brithday like :brithday or t.department like :department or t.posts like :posts or t.companyemail like :companyemail or t.companypage like :companypage or t.paycardno like :paycardno or t.entertime like :entertime or t.homeadress like :homeadress or t.credentialtype like :credentialtype or t.credentialno like :credentialno or t.tel like :tel or t.triptel like :triptel or t.hometel like :hometel or t.fax like :fax or t.spareemail like :spareemail or t.msn like :msn or t.qq like :qq or t.politicallorsc like :politicallandsc or t.school like :school or t.qualifications like :qualifications or t.hompage like :hompage and t.features like :features]
你在4楼帖的这段错误中,红色的部分应该一致,你的hql里写的是 politicallorsc ,而你的
query.setString("politicallandsc", "%" + politicallandsc + "%"); 用的是politicallandsc!!
babi_java2008 2008-06-17
  • 打赏
  • 举报
回复
我的bean:

public class Workersinfo implements java.io.Serializable {
private String worksno;
private String name;
private String sex;
private String brithday;
private String department;
private String posts;
private String companyemail;
private String companypage;
private String paycardno;
private String entertime;
private String homeadress;
private String credentialtype;
private String credentialno;
private String tel;
private String triptel;
private String hometel;
private String fax;
private String spareemail;
private String msn;
private String qq;
private String politicallandsc;
private String school;
private String qualifications;
private String hompage;
private String features;
private String headpicture;
private String remark1;
private Long remark2;
private Date remark3;
private Date remark4;
private Double remark5;
private String remark6;
private String remark7;
private String remark8;
private String remark9;
private String remark10;

public Workersinfo() {
}
public Workersinfo(String name, String sex, String brithday,
String department, String posts, String companyemail,
String companypage, String paycardno, String entertime,
String homeadress, String credentialtype, String credentialno,
String tel, String triptel, String hometel, String fax,
String spareemail, String msn, String qq, String politicallandsc,
String school, String qualifications, String hompage,
String features, String headpicture, String remark1, Long remark2,
Date remark3, Date remark4, Double remark5, String remark6,
String remark7, String remark8, String remark9, String remark10) {
this.name = name;
this.sex = sex;
this.brithday = brithday;
this.department = department;
this.posts = posts;
this.companyemail = companyemail;
this.companypage = companypage;
this.paycardno = paycardno;
this.entertime = entertime;
this.homeadress = homeadress;
this.credentialtype = credentialtype;
this.credentialno = credentialno;
this.tel = tel;
this.triptel = triptel;
this.hometel = hometel;
this.fax = fax;
this.spareemail = spareemail;
this.msn = msn;
this.qq = qq;
this.politicallandsc = politicallandsc;
this.school = school;
this.qualifications = qualifications;
this.hompage = hompage;
this.features = features;
this.headpicture = headpicture;
this.remark1 = remark1;
this.remark2 = remark2;
this.remark3 = remark3;
this.remark4 = remark4;
this.remark5 = remark5;
this.remark6 = remark6;
this.remark7 = remark7;
this.remark8 = remark8;
this.remark9 = remark9;
this.remark10 = remark10;
}

public String getWorksno() {
return this.worksno;
}

public void setWorksno(String worksno) {
this.worksno = worksno;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return this.sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getBrithday() {
return this.brithday;
}

public void setBrithday(String brithday) {
this.brithday = brithday;
}

public String getDepartment() {
return this.department;
}

public void setDepartment(String department) {
this.department = department;
}

public String getPosts() {
return this.posts;
}

public void setPosts(String posts) {
this.posts = posts;
}

public String getCompanyemail() {
return this.companyemail;
}

public void setCompanyemail(String companyemail) {
this.companyemail = companyemail;
}

public String getCompanypage() {
return this.companypage;
}

public void setCompanypage(String companypage) {
this.companypage = companypage;
}

public String getPaycardno() {
return this.paycardno;
}

public void setPaycardno(String paycardno) {
this.paycardno = paycardno;
}

public String getEntertime() {
return this.entertime;
}

public void setEntertime(String entertime) {
this.entertime = entertime;
}

public String getHomeadress() {
return this.homeadress;
}

public void setHomeadress(String homeadress) {
this.homeadress = homeadress;
}

public String getCredentialtype() {
return this.credentialtype;
}

public void setCredentialtype(String credentialtype) {
this.credentialtype = credentialtype;
}

public String getCredentialno() {
return this.credentialno;
}

public void setCredentialno(String credentialno) {
this.credentialno = credentialno;
}

public String getTel() {
return this.tel;
}

public void setTel(String tel) {
this.tel = tel;
}

public String getTriptel() {
return this.triptel;
}

public void setTriptel(String triptel) {
this.triptel = triptel;
}

public String getHometel() {
return this.hometel;
}

public void setHometel(String hometel) {
this.hometel = hometel;
}

public String getFax() {
return this.fax;
}

public void setFax(String fax) {
this.fax = fax;
}

public String getSpareemail() {
return this.spareemail;
}

public void setSpareemail(String spareemail) {
this.spareemail = spareemail;
}

public String getMsn() {
return this.msn;
}

public void setMsn(String msn) {
this.msn = msn;
}

public String getQq() {
return this.qq;
}

public void setQq(String qq) {
this.qq = qq;
}

public String getPoliticallandsc() {
return this.politicallandsc;
}

public void setPoliticallandsc(String politicallandsc) {
this.politicallandsc = politicallandsc;
}

public String getSchool() {
return this.school;
}

public void setSchool(String school) {
this.school = school;
}

public String getQualifications() {
return this.qualifications;
}

public void setQualifications(String qualifications) {
this.qualifications = qualifications;
}

public String getHompage() {
return this.hompage;
}

public void setHompage(String hompage) {
this.hompage = hompage;
}

public String getFeatures() {
return this.features;
}

public void setFeatures(String features) {
this.features = features;
}

public String getHeadpicture() {
return this.headpicture;
}

public void setHeadpicture(String headpicture) {
this.headpicture = headpicture;
}

public String getRemark1() {
return this.remark1;
}

public void setRemark1(String remark1) {
this.remark1 = remark1;
}

public Long getRemark2() {
return this.remark2;
}

public void setRemark2(Long remark2) {
this.remark2 = remark2;
}

public Date getRemark3() {
return this.remark3;
}

public void setRemark3(Date remark3) {
this.remark3 = remark3;
}

public Date getRemark4() {
return this.remark4;
}

public void setRemark4(Date remark4) {
this.remark4 = remark4;
}

public Double getRemark5() {
return this.remark5;
}

public void setRemark5(Double remark5) {
this.remark5 = remark5;
}

public String getRemark6() {
return this.remark6;
}

public void setRemark6(String remark6) {
this.remark6 = remark6;
}

public String getRemark7() {
return this.remark7;
}

public void setRemark7(String remark7) {
this.remark7 = remark7;
}

public String getRemark8() {
return this.remark8;
}

public void setRemark8(String remark8) {
this.remark8 = remark8;
}

public String getRemark9() {
return this.remark9;
}

public void setRemark9(String remark9) {
this.remark9 = remark9;
}

public String getRemark10() {
return this.remark10;
}

public void setRemark10(String remark10) {
this.remark10 = remark10;
}

}
babi_java2008 2008-06-17
  • 打赏
  • 举报
回复
那个没有异常呀,就在控制台上显示下列内容
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select workersinf0_.WORKSNO as WORKSNO, workersinf0_.NAME as NAME1_, workersinf0_.SEX as SEX1_, workersinf0_.BRITHDAY as BRITHDAY1_, workersinf0_.DEPARTMENT as DEPARTMENT1_, workersinf0_.POSTS as POSTS1_, workersinf0_.COMPANYEMAIL as COMPANYE7_1_, workersinf0_.COMPANYPAGE as COMPANYP8_1_, workersinf0_.PAYCARDNO as PAYCARDNO1_, workersinf0_.ENTERTIME as ENTERTIME1_, workersinf0_.HOMEADRESS as HOMEADRESS1_, workersinf0_.CREDENTIALTYPE as CREDENT12_1_, workersinf0_.CREDENTIALNO as CREDENT13_1_, workersinf0_.TEL as TEL1_, workersinf0_.TRIPTEL as TRIPTEL1_, workersinf0_.HOMETEL as HOMETEL1_, workersinf0_.FAX as FAX1_, workersinf0_.SPAREEMAIL as SPAREEMAIL1_, workersinf0_.MSN as MSN1_, workersinf0_.QQ as QQ1_, workersinf0_.POLITICALLANDSC as POLITIC21_1_, workersinf0_.SCHOOL as SCHOOL1_, workersinf0_.QUALIFICATIONS as QUALIFI23_1_, workersinf0_.HOMPAGE as HOMPAGE1_, workersinf0_.FEATURES as FEATURES1_, workersinf0_.HEADPICTURE as HEADPIC26_1_, workersinf0_.REMARK1 as REMARK27_1_, workersinf0_.REMARK2 as REMARK28_1_, workersinf0_.REMARK3 as REMARK29_1_, workersinf0_.REMARK4 as REMARK30_1_, workersinf0_.REMARK5 as REMARK31_1_, workersinf0_.REMARK6 as REMARK32_1_, workersinf0_.REMARK7 as REMARK33_1_, workersinf0_.REMARK8 as REMARK34_1_, workersinf0_.REMARK9 as REMARK35_1_, workersinf0_.REMARK10 as REMARK36_1_ from ZF_BS0612.WORKERSINFO workersinf0_ where (workersinf0_.WORKSNO like ?) and (workersinf0_.NAME like ?) and (workersinf0_.SEX like ?) and (workersinf0_.BRITHDAY like ?) and (workersinf0_.DEPARTMENT like ?) and (workersinf0_.POSTS like ?) and (workersinf0_.COMPANYEMAIL like ?) and (workersinf0_.COMPANYPAGE like ?) and (workersinf0_.PAYCARDNO like ?) and (workersinf0_.ENTERTIME like ?) and (workersinf0_.HOMEADRESS like ?) and (workersinf0_.CREDENTIALTYPE like ?) and (workersinf0_.CREDENTIALNO like ?) and (workersinf0_.TEL like ?) and (workersinf0_.TRIPTEL like ?) and (workersinf0_.HOMETEL like ?) and (workersinf0_.FAX like ?) and (workersinf0_.SPAREEMAIL like ?) and (workersinf0_.MSN like ?) and (workersinf0_.QQ like ?) and (workersinf0_.POLITICALLANDSC like ?) and (workersinf0_.SCHOOL like ?) and (workersinf0_.QUALIFICATIONS like ?) and (workersinf0_.HOMPAGE like ?) and (workersinf0_.FEATURES like ?)
0
babi_java2008 2008-06-17
  • 打赏
  • 举报
回复
我的SQL语句可以执行,就是查不到数据:如果执行:
List list = ws.query("","","","","","","","","","","","","","","","","","","","","","","","","");
System.out.printly(list.size());
打印出的list.size()的值还是0;


当我把查询方法中的"与关系"(ang)变成"或关系"(or)时他就报错了,错误信息如下:
java.lang.IllegalArgumentException: Parameter politicallandsc does not exist as a named parameter in [from com.system.bean.Workersinfo as t where t.worksno like :worksno or t.name like :name or t.sex like :sex or t.brithday like :brithday or t.department like :department or t.posts like :posts or t.companyemail like :companyemail or t.companypage like :companypage or t.paycardno like :paycardno or t.entertime like :entertime or t.homeadress like :homeadress or t.credentialtype like :credentialtype or t.credentialno like :credentialno or t.tel like :tel or t.triptel like :triptel or t.hometel like :hometel or t.fax like :fax or t.spareemail like :spareemail or t.msn like :msn or t.qq like :qq or t.politicallorsc like :politicallorsc or t.school like :school or t.qualifications like :qualifications or t.hompage like :hompage and t.features like :features]
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:380)
at org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:399)
at com.system.DAO.WorkersinfoDAO.query2(WorkersinfoDAO.java:388)
at com.system.service.WorkersinfoService.findByAll2(WorkersinfoService.java:64)
at com.system.service.test.test.testQuery(test.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)


大哥,帮忙给看看吧
whetu 2008-06-17
  • 打赏
  • 举报
回复
2楼的,不用加引号也可以。
lz,你的25个参数实在不雅,也完全没有必要,你定一个javabean,把这些参数都放入其中,用javabean来作为查询参数吧。
你第二个问题没有帖异常,具体什么错误,不好说。
bufeng711 2008-06-17
  • 打赏
  • 举报
回复
hibernate是这么写的 但是你的HQL语句有错误,所以编译成SQL语句的时候报错了

query.setString("name", "%" + name + "%");
放到where t.name like :name 的时候你应该发现错误了吧
就是where t.name like ':name' 得加个引号 你这是字符串

所以query.setString("name", "'%" + name + "%'"); 这么写 你看问题解决了没
babi_java2008 2008-06-17
  • 打赏
  • 举报
回复
上面那个问题我已经知道为什么错了,把form改成from就可以了,请哪位高手指点一下下面这个问题呀,上面是两个字段没有问题,为什么换成了25个字段后就查询不出任何结果了呀,

方法如下:public List query(String worksno, String name, String sex, String brithday,
String department, String posts, String companyemail,
String companypage, String paycardno, String entertime,
String homeadress, String credentialtype, String credentialno,
String tel, String triptel, String hometel, String fax,
String spareemail, String msn, String qq, String politicallandsc,
String school, String qualifications, String hompage,
String features) {
Query query = this
.getSession()
.createQuery(
"from com.system.bean.Workersinfo as t where t.worksno like :worksno and t.name like :name and t.sex like :sex and t.brithday like :brithday and t.department like :department and t.posts like :posts and t.companyemail like :companyemail and t.companypage like :companypage and t.paycardno like :paycardno and t.entertime like :entertime and t.homeadress like :homeadress and t.credentialtype like :credentialtype and t.credentialno like :credentialno and t.tel like :tel and t.triptel like :triptel and t.hometel like :hometel and t.fax like :fax and t.spareemail like :spareemail and t.msn like :msn and t.qq like :qq and t.politicallandsc like :politicallandsc and t.school like :school and t.qualifications like :qualifications and t.hompage like :hompage and t.features like :features");
query.setString("worksno", "%" + worksno + "%");
query.setString("name", "%" + name + "%");
query.setString("sex", "%" + sex + "%");
query.setString("brithday", "%" + brithday + "%");
query.setString("department", "%" + department + "%");
query.setString("posts", "%" + posts + "%");
query.setString("companyemail", "%" + companyemail + "%");
query.setString("companypage", "%" + companypage + "%");
query.setString("paycardno", "%" + paycardno + "%");
query.setString("entertime", "%" + entertime + "%");
query.setString("homeadress", "%" + homeadress + "%");
query.setString("credentialtype", "%" + credentialtype + "%");
query.setString("credentialno", "%" + credentialno + "%");
query.setString("tel", "%" + tel + "%");
query.setString("triptel", "%" + triptel + "%");
query.setString("hometel", "%" + hometel + "%");
query.setString("fax", "%" + fax + "%");
query.setString("spareemail", "%" + spareemail + "%");
query.setString("msn", "%" + msn + "%");
query.setString("qq", "%" + qq + "%");
query.setString("politicallandsc", "%" + politicallandsc + "%");
query.setString("school", "%" + school + "%");
query.setString("qualifications", "%" + qualifications + "%");
query.setString("hompage", "%" + hompage + "%");
query.setString("features", "%" + features + "%");

return query.list();
}

List list = ws.query("","陈","","","","","","","","","","","","","","","","","","","","","","","");
System.out.printly(list.size());

打印结果为0,应该为1才对呀

67,513

社区成员

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

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