[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 メーリングリストの案内