Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HQL查询-通过联接关系提取数据_Java_Hibernate_Join_Hql - Fatal编程技术网

Java HQL查询-通过联接关系提取数据

Java HQL查询-通过联接关系提取数据,java,hibernate,join,hql,Java,Hibernate,Join,Hql,我在通过javaBean从jsp页面调用相对简单的HQL查询时遇到了问题。我现在只是在做一些测试,以确保在我对我的页面发狂之前我知道如何做每件事 我遇到的问题(当然,除了不知道我在做什么之外)是GetHighbider函数工作不正常。如下所述,投标是用户和项目之间的连接。我想要一个itemID,并使用它从Bid表中查找最大bidAmt,然后返回与该出价相关联的UserID或用户对象。然而,当我在当前设置中运行该函数时,它返回null,我总是以错误“未能找到项目的高出价者”结束 我在NetBean

我在通过javaBean从jsp页面调用相对简单的HQL查询时遇到了问题。我现在只是在做一些测试,以确保在我对我的页面发狂之前我知道如何做每件事

我遇到的问题(当然,除了不知道我在做什么之外)是GetHighbider函数工作不正常。如下所述,投标是用户和项目之间的连接。我想要一个itemID,并使用它从Bid表中查找最大bidAmt,然后返回与该出价相关联的UserID或用户对象。然而,当我在当前设置中运行该函数时,它返回null,我总是以错误“未能找到项目的高出价者”结束

我在NetBeans的HQL查询编辑器中的gethighbider函数中尝试了两个查询(其中一个被注释掉),它成功地返回了与指定项的最高出价匹配的用户实例。这就是为什么当我在jsp中实际测试查询时会得到一个空值的原因

我已经处理这件事好几天了,似乎什么都做不到。任何关于良好学习工具或参考资料的帮助、提示、指点或建议都将不胜感激。我觉得一旦我解决了这个问题,我就可以为我的项目创建几乎所有需要的功能

---编辑--- 以下是netBeans向我吐出的错误:

at org.hibernate.hql.classic.PathExpressionParser.token(PathExpressionParser.java:130)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
at org.hibernate.hql.classic.SelectParser.token(SelectParser.java:176)
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
at org.hibernate.hql.classic.ClauseParser.end(ClauseParser.java:113)
at org.hibernate.hql.classic.PreprocessingParser.end(PreprocessingParser.java:122)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:29)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:216)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy59.createQuery(Unknown Source)
at GavelDB.GavelDBHelper.getHighBidder(GavelDBHelper.java:99)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:109)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1600)
我有以下数据库设计:
=====================================================

User table: <br>
PK USER_ID, <br>
USER_NAME UNIQUE, <br>
...

Item table: <br>
PK ITEM_ID, <br>
FK ITEM_SELLER -> Many to One relationship with user.USER_ID, <br>
FK ITEM_BUYER -> Many to One relationship with user.USER_ID, <br>...

Bid table (bridge between user and item): <br>
PK BID_ID, <br>
FK BIDDER_ID -> Many to One relationship with user.USER_ID, <br>
FK ITEM_ID -> Many to One relationship with item.ITEM_ID, <br>...
用户表:
PK用户ID,
用户名唯一,
... 项目表:
主键项目标识,
FK物料\卖家->与user.user\ ID的多对一关系,
FK ITEM_BUYER->与user.user_ID的多对一关系,
。。。 投标表(用户和项目之间的桥梁):
PK BID_ID,
FK投标人ID->与用户的多对一关系。用户ID,
FK ITEM_ID->与ITEM.ITEM_ID的多对一关系,
。。。
如果查看堆栈跟踪,您将看到在Hibernate处理查询字符串时发生错误

看看这个:

        Query q = session.createQuery (
                  "select user" +
                  "from User as user, Bid as bid" +
                  "where user.id = bid.user.id and bid.bidAmt in(" +
                                   "select max(b.bidAmt)" +
                                   "from Bid as b" +
                                   "where b.item.id = '" + itemID + "')");
要连接的字符串之间没有空格,因此要构造的查询字符串如下所示:

select *userfrom* User as user, Bid as *bidwhere* user.id = bid.user.id and bid.bidAmt *in(select max(b.bidAmt)from* Bid as *bwhere* b.item.id ...
因此,hibernate在试图解析异常时会抛出异常

希望有帮助


Kate。

如果查看堆栈跟踪,您将看到在Hibernate处理查询字符串时发生错误

看看这个:

        Query q = session.createQuery (
                  "select user" +
                  "from User as user, Bid as bid" +
                  "where user.id = bid.user.id and bid.bidAmt in(" +
                                   "select max(b.bidAmt)" +
                                   "from Bid as b" +
                                   "where b.item.id = '" + itemID + "')");
要连接的字符串之间没有空格,因此要构造的查询字符串如下所示:

select *userfrom* User as user, Bid as *bidwhere* user.id = bid.user.id and bid.bidAmt *in(select max(b.bidAmt)from* Bid as *bwhere* b.item.id ...
因此,hibernate在试图解析异常时会抛出异常

希望有帮助


Kate。

您正在捕获任何可能的异常并将其转储到standard out。你确定没有记录异常吗?是的,结果是有异常。。。我只是对netBeans不太熟悉,我想我没有意识到。我把错误贴在了主帖上,让你们看看。希望我今晚有时间自己仔细看一下。你正在捕捉任何可能的异常并将其转储到standard out。你确定没有记录异常吗?是的,结果是有异常。。。我只是对netBeans不太熟悉,我想我没有意识到。我把错误贴在了主帖上,让你们看看。希望今晚我有时间自己仔细看看。