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