javaでレポート管理システムを作っています。
検索バーに文字を打ち込んで氏名をあいまい検索できるようにしたいのですが
以下エラーメッセージが表示されます。
エラーメッセージ
type 例外レポート メッセージ org.hibernate.exception.DataException: could not extract ResultSet 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not extract ResultSet org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149) org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157) org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423) org.hibernate.query.Query.getResultList(Query.java:146) controllers.reports.ReportsSearch.doGet(ReportsSearch.java:56) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) filters.LoginFilter.doFilter(LoginFilter.java:74) filters.EncodingFilter.doFilter(EncodingFilter.java:40) 原因 org.hibernate.exception.DataException: could not extract ResultSet org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:118) org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:69) org.hibernate.loader.Loader.getResultSet(Loader.java:2168) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1931) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1893) org.hibernate.loader.Loader.doQuery(Loader.java:938) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) org.hibernate.loader.Loader.doList(Loader.java:2692) org.hibernate.loader.Loader.doList(Loader.java:2675) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507) org.hibernate.loader.Loader.list(Loader.java:2502) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502) org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:392) org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) org.hibernate.internal.SessionImpl.list(SessionImpl.java:1490) org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1445) org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414) org.hibernate.query.Query.getResultList(Query.java:146) controllers.reports.ReportsSearch.doGet(ReportsSearch.java:56) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) filters.LoginFilter.doFilter(LoginFilter.java:74) filters.EncodingFilter.doFilter(EncodingFilter.java:40) 原因 java.sql.SQLException: Operand should contain 1 column(s) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484) com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60) org.hibernate.loader.Loader.getResultSet(Loader.java:2168) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1931) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1893) org.hibernate.loader.Loader.doQuery(Loader.java:938) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) org.hibernate.loader.Loader.doList(Loader.java:2692) org.hibernate.loader.Loader.doList(Loader.java:2675) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507) org.hibernate.loader.Loader.list(Loader.java:2502) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502) org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:392) org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) org.hibernate.internal.SessionImpl.list(SessionImpl.java:1490) org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1445) org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414) org.hibernate.query.Query.getResultList(Query.java:146) controllers.reports.ReportsSearch.doGet(ReportsSearch.java:56) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) filters.LoginFilter.doFilter(LoginFilter.java:74) filters.EncodingFilter.doFilter(EncodingFilter.java:40) 注意 原因のすべてのスタックトレースは、Apache Tomcat/8.0.43のログに記録されています Apache Tomcat/8.0.43
以下コードをチェックいただけますでしょうか。
model
employeeテーブルクエリ文
query = "SELECT e FROM Employee AS e WHERE e.name LIKE :name"
reportテーブルクエリ文
query = "SELECT r FROM Report AS r WHERE r.employee = :employee"
view
<c:forEach var="r_employee_id" items="${ r_employee_id}"> <tr class="row${status.count % 2}"> <td class="search_name"><c:out value="${r_employee_id.employee.name}" /></td> <td class="report_date"><fmt:formatDate value='${r_employee_id.report_date}' pattern='yyyy-MM-dd' /></td> <td class="report_title">${r_employee_id.title}</td> <td class="report_action"><a href="<c:url value='/reports/show?id=${r_employee_id.id}' />">詳細を見る</a></td> <td class="report_favo">${reports_favocount[r_employee_id.id]}</td> </tr> </c:forEach>
controller
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { EntityManager em = DBUtil.createEntityManager(); //パラメータを取得し変数へ格納 String employee_name = request.getParameter("search"); System.out.println(employee_name); //クエリの結果を変数へ格納、該当する名前のレコードを取得 List<Employee> employee_search = em.createNamedQuery("getEmployeesName" , Employee.class) .setParameter("name",employee_name + "%" ) .getResultList(); System.out.println(employee_search); //レポートテーブル内データ取得 List<Report> r_employee_id = em.createNamedQuery("getCreateUser" , Report.class) .setParameter("employee", employee_search) .getResultList(); em.close(); request.setAttribute("r_employee_id", r_employee_id); RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/reports/search.jsp"); rd.forward(request, response); } }
あなたの回答
tips
プレビュー