站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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分


学习


↑返回目录
前一篇: CORBA:: IDL中后一个interface的一个函数,用前一个interface作为参数是否可以
后一篇: 提问:SQLServer数据库转ORACLE,WebLogic7.01后台报错,到底是什么原因呢?