[Seasar-user:20735] [S2JDBC] Oracle の外部キー制約を利用した場合のSQLExceptionの取り扱いについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2011年 4月 19日 (火) 17:57:14 JST


はじめまして。山本と申します。

Oracleの外部キー制約を利用しています。
親キーがないエンティティをインサートすると、次のような例外が発生します。(
一部、xxxでマスクしています。)

java.sql.SQLException: ORA-02291: 整合性制約(XXX.XXX_FK)に違反しました - 
親キーがありません

        at 
oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
        at 
oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131)
        at 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:204)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034)
        at 
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
        at 
oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:953)
        at 
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1222)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3387)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3468)
        at 
oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1062)
        at 
org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:89)
        at 
org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:66)
        at 
org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:125)
        at 
org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90)
        at xxx.service.AbstractService.insertXXX(AbstractService.java:xxx)

insertXXXメソッドでは、次のような処理を実行しています。

        jdbcManager.insert(entity).execute();

この例外は、例えば従業員表に新しいレコードを追加する際、部門番号が部門表に
存在しない場合に発生します。
ここまでは良いのですが・・・、

SAStruts + S2JDBC環境で従業員を追加する際、上記例外を画面(JSP)にエラーメッ
セージを表示したいのですが、
どこでキャッチして、どう処理するかで悩んでいます。
(SEntityExistsExceptionやSOptimisticLockExceptionは普通にキャッチできるの
ですが・・・。)

どなたかアドバイスよろしくお願いします。

山本 亮(やまもと りょう)


Seasar-user メーリングリストの案内