У меня проблемы с относительно простым HQL-запросом, вызываемым со страницы jsp через javaBean.Сейчас я просто готовлюсь к тестированию, чтобы убедиться, что я знаю, как сделать все, прежде чем я сойду с ума от своих страниц.
Проблема, с которой я сталкиваюсь (не зная, конечно, что я делаю, конечно), заключается в том, что функция getHighBidder не работает должным образом.Как указано ниже, Bid - это соединение между Пользователем и Предметом.Я хочу получить itemID и использовать его для поиска максимальной ставкиAmt в таблице ставок и возврата объекта UserID или пользователя, связанного с заявкой.Однако, когда я запускаю функцию в моей текущей настройке, она возвращает ноль, и я всегда получаю ошибку «Не удалось найти высокую цену для товара».
Я пробовал оба запроса (один закомментирован) в функции getHighBidder в редакторе запросов HQL в NetBeans, и он успешно возвращает экземпляр пользователя, который соответствует наибольшей ставке для указанного элемента.Вот почему я так растерялся, почему я получаю нулевые значения, когда я на самом деле тестирую запрос в jsp.
Я имел дело с этим уже пару дней и не могу получитьв любом месте.Любая помощь, советы, указатели или советы по хорошим учебным пособиям или ссылкам будут чрезвычайно признательны.Я чувствую, что как только я решу эту проблему, я смогу создать почти все функции, которые мне нужны для моего проекта.
--- EDIT --- Вот ошибка, которую выдает мне 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)
Вот часть страницы JSP, которую я использую для вызова компонента:
<jsp:useBean id="test" class="GavelDB.GavelDBHelper" scope="page">
<%
...
user = test.getHighBidder(item.getItemId());
if(user == null)
out.println("Failed to find high bidder for Item");
else
out.println("Successfully selected User Number " + user.getUserId() + ": " + user.getUserName());
%>
Здесь вызывается компонент.Обратите внимание, что getItemByID прекрасно работает с моей текущей установкой, возвращая объект Item для использования на странице jsp.
public class GavelDBHelper
{
Session session = null;
...
public Item getItemByID(int itemID)
{
Item item = null;
try
{
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery (
"from Item as item where item.id = '" + itemID + "'");
item = (Item)q.uniqueResult();
} catch (Exception e)
{
e.printStackTrace();
}
return item;
}
public User getHighBidder(int itemID)
{
User highBidder = null;
try
{
org.hibernate.Transaction tx = session.beginTransaction();
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 + "')");
/*Query q = session.createQuery (
"select bid.user"+
"from Bid as bid"+
"where bid.bidAmt in("+
"select max(b.bidAmt)"+
"from Bid as b"+
"where b.item.id = '"+ itemID +"')");*/
highBidder = (User)q.uniqueResult();
} catch (Exception e)
{
e.printStackTrace();
}
return highBidder;
}
...
}
У меня есть следующий дизайн базы данных:
===========================================================
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>...