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