[Seasar-user:20753] Re: [S2JDBC] Oracle の外部キー制約を利用した場合のSQLExceptionの取り扱いについて
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2011年 5月 13日 (金) 15:35:28 JST
小林 (koichik) さん
山本です。
返信ありがとうございます。
その後、SQLRuntimeExceptionでラップされていることに気づきました。
普通にキャッチできますね。
ちょっとハズい。
公式メーリングリストでこんな脱力系の質問してしまってごめんなさい。
山本 亮(やまもと りょう)
[E-MAIL ADDRESS DELETED] wrote on 2011/05/13 14:45:37:
> 小林 (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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内