[Seasar-user:20752] Re: [S2JDBC] Oracle の外部キー制約を利用した場合のSQLExceptionの取り扱いについて
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2011年 5月 13日 (金) 14:45:37 JST
小林 (koichik) です.
ごめんなさい、見落としていました。
ずいぶん時間が経ってしまいましたが、解決済みでしょうか?
Date: Tue, 19 Apr 2011 17:57:14 +0900
From: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20735] [S2JDBC] Oracle の外部キー制約を利用した場合のSQLExceptionの取り扱いについて
> はじめまして。山本と申します。
>
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
Seasar-user メーリングリストの案内