下面是业务实现:
public class PFeeDaoImpl extends HibernateDaoSupport implements IPFeeDao{    Session session=null;
    Transaction tx=null;
    public void remove(String feeId) throws DBException{
try{

String hql="delete PFee where fee_Id in(select PFee from PTransFee where fee_Id=?)";

Query q = super.getSession().createQuery(hql);
q.setString(0, feeId);
             q.executeUpdate();
tx.commit();
session.close();
}catch(Exception exp){
exp.printStackTrace();
throw new DBException();
}finally{

}

}
}
在进行删除的时候就显示:29958 [http-8080-Processor24] WARN  org.hibernate.util.JDBCExceptionReporter  - SQL Error: 2292, SQLState: 23000
29958 [http-8080-Processor24] ERROR org.hibernate.util.JDBCExceptionReporter  - ORA-02292: 违反完整约束条件 (PADMIN.FK_P_TRANS__RELATION__P_FEE) - 已找到子记录org.hibernate.exception.ConstraintViolationException: could not execute update query
at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:74)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.hql.ast.UpdateStatementExecutor.execute(UpdateStatementExecutor.java:99)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:297)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:871)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:89)
at com.crinode.mbank.pmgt.dao.Impl.PFeeDaoImpl.remove(PFeeDaoImpl.java:103)
at com.crinode.mbank.pmgt.service.Impl.PFeeserviceImpl.remove(PFeeserviceImpl.java:62)
at com.crinode.mbank.pmgt.action.PFeeAction.remove(PFeeAction.java:315)
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.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.crinode.mbank.pmgt.basedata.SetCharsetFilter.doFilter(SetCharsetFilter.java:13)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: ORA-02292: 违反完整约束条件 (PADMIN.FK_P_TRANS__RELATION__P_FEE) - 已找到子记录 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:102)
at org.hibernate.hql.ast.UpdateStatementExecutor.execute(UpdateStatementExecutor.java:76)
... 36 more
请各位帮帮忙:这个问题已经解决了好几天了!!

解决方案 »

  1.   

    outer-join="auto"可能是这里吧  你要删除的PFee中的记录是与PTransFee表关联的 String hql="delete PFee where fee_Id in(select PFee from PTransFee where fee_Id=?)";但是有个地方没看得  你上面这句表名是PFee PTransFee 而你配置文件中是
    <class name="com.crinode.mbank.pmgt.po.PFee" table="P_FEE" schema="PADMIN"> 
    <class name="com.crinode.mbank.pmgt.po.PTransFee" table="P_TRANS_FEE" schema="PADMIN"> 表名是P_FEE P_TRANS_FEE楼主确认一下吧
      

  2.   

    Cause: An attempt was made to delete a row that is referenced by a foreign key.Action: It is necessary to DELETE or UPDATE the foreign key before changing this row.
      

  3.   

    DELETE or UPDATE the foreign key
      

  4.   

    你这么试试,你知道fee_Id,所以能得到fee_Id所对应的PFee实例,然后session.delete(instance)