当前页面: 开发资料首页 → J2EE 专题 → hibernate查询问题,回答均有分,达人指教
hibernate查询问题,回答均有分,达人指教
摘要: hibernate查询问题,回答均有分,达人指教
执行java代码
StringBuffer query = new StringBuffer("from CvInfo where can in (select can from InterviewInfo where instatusNO = 1)");
return getHibernateTemplate().find(query.toString());
返回错误
root cause
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select cvinfo0_.cvid as cvid, cvinfo0_.cvfile as cvfile15_, cvinfo0_.skill as skill15_, cvinfo0_.cvdetail as cvdetail15_, cvinfo0_.name as name15_, cvinfo0_.email as email15_, cvinfo0_.degreeNO as degreeNO15_, cvinfo0_.referer as referer15_, cvinfo0_.jobtypeNO as jobtypeNO15_ from cvInfo cvinfo0_ where (cvinfo0_.name, cvinfo0_.email)in (select (interviewi1_.cname, interviewi1_.cemail) from interviewInfo interviewi1_ where instatusNO=1)]; SQL state [21000]; error code [1241]; Operand should contain 1 column(s); nested exception is java.sql.SQLException: Operand should contain 1 column(s)
org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:97)
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:258)
其中的重点是两个can, can是含复合主键的对象can(name,email),都说hibernate的查询功能强大,该怎么写?达人请抽空指教
加一个别名试.
你仔细看看Hibernate自动生成的SQL,子查询中的where条件:
from interviewInfo interviewi1_ where instatusNO=1
instatusNO 是属于哪个表的?
回楼上:
instatusNO是interviewInfo引用的一个外码(一个对象里面的东东),
这里的报错重点是在can那个对象变量,表字段(name,email)和Bean
变量(can)对应,
写一段时间下来,我都有点糊涂了,HQL到底是针对表的还是针对Bean的,
像上例中,如果是针对Bean的,就应该写成***.instatus=1,但是我确实
写instatus=1成功了,那么说它又是针对数据表写的
hibernate是针对对象的
貌似hibernate不支持子查询,请用左联或者右联,强等也行。
回楼上:
是支持子查询的,觉得HQL很不严格,统一用对象就用对象吧,搞得有时还非得写表的字段才行
今天是最后一天了,不出来就就算了,需求上也没有这个的。
另外主要也是想借此机会深入了解一下HQL
另外说一下:条件查询(criteria)用了倒是觉得完全是针对对象的
StringBuffer query = new StringBuffer("from CvInfo c where c.can in (select i.can from InterviewInfo i where i.instatusNO = 1)");
加别名实施阿
你这样写一下:
StringBuffer query = new StringBuffer("from CvInfo where can in (select can from InterviewInfo where InterviewInfo.instatusNO = 1)");
别名问题 接10分
学习