问题描述
我在catalina.out日志中随机看到相同的错误:
I randomly see the same error in the catalina.out log:
WARNING: SQL Error: 0, SQLState: 25P02
Sep 8, 2010 11:50:13 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERROR: current transaction is aborted, commands ignored until end of transaction block
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at PersistanceHelper.getTranslationByName(PersistanceHelper.java:174)
at SearchBean.getObject(SearchBean.java:146)
at org.apache.jsp.ajax.get_005fobject_jsp._jspService(get_005fobject_jsp.java:72)
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:377)
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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
我不知道该问题的原因是什么,因为我是随机得到的,通常查询工作正常. m使用Postgresql 8.3,并且该应用程序在JSF 2.0中.有没有人处理过这样的错误?原因是什么?感谢您的任何建议.
I don't know what is the reason for that problem as I get it randomly and normally the query works just fine. m using Postgresql 8.3 and the application is in JSF 2.0. Has anyone ever dealt with such an error? What is the cause? Thanks for any suggestions.
我需要补充一点,我只是从数据库中读取数据,而不更新或在这些查询中插入任何数据.
I need to add that I'm only reading data from the database, but do not update or insert any in those queries.
---------------------------------编辑------------- -------------------------这是一个示例查询:
--------------------------------- edit --------------------------------------This is an example query:
List object = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')");
object = (List<Table>) q.list();
} catch (Exception e)
{ e.printStackTrace(); }
return object; }
我刚刚在tomcat日志中注意到了这一点:
I just noticed this in the tomcat log:
Initial SessionFactory creation failed.java.lang.OutOfMemoryError: PermGen space
可能是原因吗?如果我刷新了该应用程序,它会在一段时间内正常工作.
Could it be the reason? If I refresh the application, it tends to work normally for some time.
最好的问候,ass.
Best Regards,sass.
推荐答案
这可能意味着您的某些查询未执行.如果您在交易中有很多查询,例如
It probably means some of your queries were not executed. If you have many queries in transaction, e.g.
- 开始交易
- query1
- query2
- query3
- 完成交易
and query2引发错误,那么当您尝试执行query3时,您会收到此错误.
and query2 throws error, then when you try to execute query3 you get this error.
- 开始交易
- query1(成功)
- query2(错误,出了点问题)
- query3(抛出类似您的异常)
- 完成交易
您应该处理从query2引发的异常并进行处理.向用户显示一些错误,回滚事务,切勿尝试执行query3.
You should handle exception thrown from query2 and handle it. Show some error to the user, rollback transaction, never try to execute query3.
也在此处查看: http://www.faqs.org/docs/ppbook/x15040.htm
更新
要完成交易:
List object = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
try {
Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')");
object = (List<Table>) q.list();
} catch (Exception e) {
e.printStackTrace();
} finally {
//You can safely rollback here because you are not changing anything in the DB.
//If you change something, you should commit transaction at the end of try block,
//and here check if it is still active and rollback if it is.
tx.rollback();
}
return object;
} catch (HibernateException e) {
throw new RuntimeException("Could not begin transaction");
}
这篇关于休眠错误:当前事务中止,命令被忽略,直到事务块结束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!