该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个应该是hibernate 的严重的bug.
经过试验,已经能够得出结论:
hibernate 3 对 oracle 表的date 型字段执行 update 操作的时候,会造成严重的宕机问题.
代码如下:
obj.setOrderTime(new Date());
weblogic 表现的错误如下:
org.hibernate.TransactionException: JDBC rollback failed
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.ja
va:142)
at jsp_servlet._jsp._test.__dump._jspService(__dump.java:150)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6456)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
Caused by: java.sql.SQLException: 关闭的连接
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:162)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
:227)
at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.jav
a:994)
at weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection
.rollback(Unknown Source)
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.ja
va:134)
解决办法:
1.数据库表不要用date 类型,而要用timestamp(6).
2.执行update 操作的java语句采用如下方式:
CaUtil cautil = new CaUtil();
obj.setOrderTime(cautil.formatDateForHibernate(new Date()));