2013-08-21 66 views
1

我使用JPA查詢,當我用getSingleResult()在JPA thorws例外

query.getSingleResult(); 

有人拋出異常。我很清楚,如果多個記錄匹配參數,該方法會引發異常,但在我的情況下,參數是主鍵,這意味着結果將是唯一的。但代替上述方法,當我使用

query.getResultList(); 

我沒有這樣的問題。我很困惑。同樣,當我使用的方法

query.setMaxResults(some value); 

然後試圖得到結果列表,我的程序拋出許多錯誤..!

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 registered0_.id as id0_, registered0_.current_status as current2_0_, registere' at line 1 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1360) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1288) 
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:313) 
    at com.aces.servlets.UserStatusServlet.getStatus(UserStatusServlet.java:193) 
    at com.aces.servlets.UserStatusServlet.access$0(UserStatusServlet.java:188) 
    at com.aces.servlets.UserStatusServlet$1.onComplete(UserStatusServlet.java:50) 
    at org.apache.catalina.core.AsyncListenerWrapper.fireOnComplete(AsyncListenerWrapper.java:40) 
    at org.apache.catalina.core.AsyncContextImpl.fireOnComplete(AsyncContextImpl.java:119) 
    at org.apache.coyote.AsyncStateMachine.asyncPostProcess(AsyncStateMachine.java:190) 
    at org.apache.coyote.AbstractProcessor.asyncPostProcess(AbstractProcessor.java:116) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:593) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.exception.SQLGrammarException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 registered0_.id as id0_, registered0_.current_status as current2_0_, registere' at line 1 
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:83) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) 
    at com.sun.proxy.$Proxy54.executeQuery(Unknown Source) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1962) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:829) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) 
    at org.hibernate.loader.Loader.doList(Loader.java:2447) 
    at org.hibernate.loader.Loader.doList(Loader.java:2433) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2263) 
    at org.hibernate.loader.Loader.list(Loader.java:2258) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1161) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:280) 
    ... 12 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 registered0_.id as id0_, registered0_.current_status as current2_0_, registere' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) 
    ... 27 more 
+0

你應該提供可引起[SSCCE(HTTP:/ /www.sscce.org)獲得更好的幫助,你甚至不會發布你的錯誤或stacktrace ..,你應該provi去尋求更好的幫助。 – nachokk

+0

@nachokk我所有的堆棧跟蹤和錯誤都發布在我之前的問題中。只需在我的問題結尾點擊鏈接即可。 –

+0

至少包括您收到的例外 –

回答

0
  • getSingleResult()拋出NoResultException如果查詢到任何結果。
    此行爲使得getSingleResult()不適用於您希望查詢返回零個或一個結果的情況。在這種情況下,您需要使用getResultList()

  • 您與setMaxResults()問題似乎由不正確的SQL方言設置