Hibernate version: 2.1.7
Name and version of the database you are using: Oracle 9i
The stack trace below was generated when I intentionally triggered a child record delete error. Instead of getting a ConstraintViolationException, as I would have expected, I received a GenericJDBCException. I have modified the hibernate source to trigger a ConstraintViolationException from an oracle 2292 child record error code via the Oracle9Dialect class.
I was wondering why this type of error is not treated as a referential integrity error in hibernate. The pattern of the oracle error message in the SQLException matches your internal template for contraint violation errors. Logically, a delete that fails due to a child record is a type of constraint violation. Is this a bug of omission, or was there a conscious decision not to treat this type of error as a constraint violation? If this was intentional, could someone tell me why?
Thanks!
Original Stack trace:
com.sas.edu.educentral.exceptions.hibernate.HibernateTransactionException: net.sf.hibernate.exception.GenericJDBCException: could not delete: [com.sas.edu.educentral.edusa.beans.DiscountProgram#540779161]
at com.sas.edu.educentral.system.dbaccess.HibernateSessionUtil.commitTransaction(HibernateSessionUtil.java:116)
at com.sas.edu.educentral.edusa.data.DiscountProgramData.deleteDiscountProgram(DiscountProgramData.java:176)
at com.sas.edu.educentral.edusa.domain.DiscountProgramManager.deleteDiscountProgram(DiscountProgramManager.java:113)
at com.sas.edu.educentral.edusa.servlets.discpgm.DiscountProgramView.deleteDiscountProgram(DiscountProgramView.java:65)
at com.sas.edu.educentral.edusa.servlets.discpgm.DiscountProgramView.doPost(DiscountProgramView.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:306)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:745)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:868)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: net.sf.hibernate.exception.GenericJDBCException: could not delete: [com.sas.edu.educentral.edusa.beans.DiscountProgram#540779161]
at net.sf.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:90)
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:79)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:30)
at net.sf.hibernate.persister.AbstractEntityPersister.convert(AbstractEntityPersister.java:1332)
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:599)
at net.sf.hibernate.impl.ScheduledDeletion.execute(ScheduledDeletion.java:29)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2396)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2260)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at com.sas.edu.educentral.system.dbaccess.HibernateSessionUtil.commitTransaction(HibernateSessionUtil.java:110)
... 22 more
Caused by: java.sql.SQLException: ORA-02292: integrity constraint (EDUSA.DISC_PGM_RULE_FK1) violated - child record found
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:580)
... 28 more
New Stack trace (after code modification):
com.sas.edu.educentral.exceptions.hibernate.HibernateTransactionException: net.sf.hibernate.exception.ConstraintViolationException: could not delete: [com.sas.edu.educentral.edusa.beans.DiscountProgram#540779161]
at com.sas.edu.educentral.system.dbaccess.HibernateSessionUtil.commitTransaction(HibernateSessionUtil.java:116)
at com.sas.edu.educentral.edusa.data.DiscountProgramData.deleteDiscountProgram(DiscountProgramData.java:176)
at com.sas.edu.educentral.edusa.domain.DiscountProgramManager.deleteDiscountProgram(DiscountProgramManager.java:113)
at com.sas.edu.educentral.edusa.servlets.discpgm.DiscountProgramView.deleteDiscountProgram(DiscountProgramView.java:65)
at com.sas.edu.educentral.edusa.servlets.discpgm.DiscountProgramView.doPost(DiscountProgramView.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:306)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:745)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:868)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: net.sf.hibernate.exception.ConstraintViolationException: could not delete: [com.sas.edu.educentral.edusa.beans.DiscountProgram#540779161]
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:81)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:30)
at net.sf.hibernate.persister.AbstractEntityPersister.convert(AbstractEntityPersister.java:1332)
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:599)
at net.sf.hibernate.impl.ScheduledDeletion.execute(ScheduledDeletion.java:29)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2396)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2260)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at com.sas.edu.educentral.system.dbaccess.HibernateSessionUtil.commitTransaction(HibernateSessionUtil.java:110)
... 22 more
Caused by: java.sql.SQLException: ORA-02292: integrity constraint (EDUSA.DISC_PGM_RULE_FK1) violated - child record found
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:580)
... 28 more
|