幾何データ演算子を使いたい配列からINへのバインドで例外が出るバッチ更新の途中でエラーになった場合に、何件目でエラーになったか知りたいSQL文の変数部分にクラス名が含まれてしまう排他制御のTimestamp値にDB側の時間をセットしたいBLOB型を扱えますか?OracleでBLOB型を扱えないようだけれど?3つ以上のテーブルをJOINしたいSybaseでストアドプロシージャ実行時にFetchSizeが指定されているとエラーになるMySQLでクエリキャッシュがヒットしないDB2でBLOB型のデータを取得時に例外が発生する更新結果が0件の時に例外を発生させたくないPosgreSQLとS2Pagerの組み合わせで、limitとoffsetを使用した高速取得使用時にSQLExceptionが発生する。ヒット数が0件の場合はnullが返るの?バッチ更新の場合、IDアノテーションが無視されるOracleのNUBER型のカラムにBEAN側のInteger型プロパティを組み合わせると、Insert/Update時に値がとんでもなくなる(例8.3000000000000000000000000000000000E+83)場合がある。以下のような例外が出力されますIDアノテーションのidentity/sequenceはどのDBが対応していますか?IDアノテーションが機能しないisolationレベルを変更したいDaoのメソッド呼び出し時にorg.seasar.dao.MethodSetupFailureRuntimeExceptionが発生しました。プライマリーキーのみのテーブルで例外BooleanToIntStatementFactoryとPagerStatementFactoryを併用したいSQLをツールで実行すると結果が取得できるのに、そのSQLをS2Dao経由で実行すると結果が取得できない。†S2Daoは以下のDBに対応しています。JOIN構文をサポートしているDBでしたら動作すると思います。†DaoにはBEANアノテーションを、JavaBeans(Entity)にはTABLEアノテーションを書きましょう。"EMP";DaoにはS2DaoInterceptorを適用する必要があります。AbstractなDaoを使うことも可能ですが、何らかのDaoインタフェースをimplementsしている必要があります。バージョンアップしたら動かなくなったーーdao.diconなど同梱のdiconがupdateされている可能性があります。リリースノートを確認しましょう。†S2Daoとしてはトランザクション制御に関与しません。S2が持つトランザクション制御機能を利用することを想定しています。多いパターンは、Daoを呼び出す側のコンポーネントへj2ee.requiredTxアスペクトをかけることになるでしょう。19:48:55)QuestionS2Daoの開発の中で、updateBatchを投げる際、更新したくない列を指定したいのですが、方法がわかりません。AnswerNO_PERSISTENT_PROPSアノテーションを使用すると更新対象に含まれなくなります。http://www.seasar.org/s2dao.html#NoPersistentPropsAnnotationを参照されると良いと思います。19:46:22)QuestionS2DAOでconnectionPoolを利用しているのですが、コネクションのプーリングが行なわれていないような動作をしているので、設定に漏れがあるのではないかと思い、何かアドバイスを頂ければとメールさせて頂きました。実行ログを見ると、最初に1件のみ[物理的なコネクションを取得しました]を表示して、以降はDBにアクセスすると[論理的なコネクションを取得しました]と出力され、1つ物理コネクションを使い回しているようなログが出力されています。この時に、Oracleのv$sessionを見ると論理的なコネクションの数だけセッションが張られています。DBへのアクセスを行なわずにいるとログには[論理的なコネクションを取得しました]の表示がOracleに張られていたセッションの数だけ表示されます。constructorにありますね。diconファイルから構築しているので、結局のところVM空間上に複数のコンポーネントセットが存在することになります。いうことは、DataSourceもConnectionPoolも複数あるので、ログにあるような動きになります。S2の挙動というよりかは、DIの適用パターンにあわせて設計・動きを少し変更されたほうがよろしいかと思います。constructorを削除する。スと実装クラスに分離したほうが良いです。毎SQLを生成して発行するのか、どちらなのでしょう?サンプルのログをみていると毎回生成しているように思えるのですが。AnswerPreparedStatementに格納してあるプリコンパイルされたSQLを発行しています。ログではき出されているSQLは、Statementに渡される(発行する)SQLをそのまま表示している訳ではなく、ログにはき出すためにS2が、パラメータが埋め込まれたSQLをせっせと作っています。org.seasar.extension.jdbc.impl.BasicHandlerクラスのgetCompleteSqlメソッドが参考になると思います。19:40:26)QuestionS2DaoでJDK1.4.2_08だと動くコードがJDK1.4.2_10にしてDaoのメソッドを呼ぶとClassCastExceptionでこけてしまうコードがあります。DaoのメソッドはBigDecimalを返すメソッドで引数4つを取ります。test.TestDatDao$$EnhancedByS2AOP$$18622f3.sumTest(TestDatDao$$EnhancedByS2AOP$$18622f3.java)となっております。SQLを組み立てる時にこけている様な感じです。DAOのバージョンはs2-dao-1.0.28.jarでPostgreSQL8.0.3を使っております。1.4.2_10にはJISAutoDetectのバグがあります。http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25802&forum=12FIXされるまで1.4.2_10より前のバージョンを使われることをオススメします。19:33:05)QuestionS2Daoのプライマリーキーの処理について伺います。S2Daoを使ってDB2へのアクセスを勉強しております。テーブルにプライマリーキーが設定していないと、S2Daoが「・・にプライマリーキーが見付りません」の例外を投げてきます。テーブルに直接プライマリーキーが設定していれば問題がありませんが、既存のテーブルに明示的に主キーではなく、Index(索引)の形で主キーを指定されていることです。この場合はS2Daoをどのようにすれば「・・にプライマリーキーが見付りません」の例外を回避できるのでしょうか。AnswerUPDATEやDELETEなどの自動生成を行わなければ、プライマリキーがなくても問題ありません。これは、UPDATEやDELETE文のWHERE句にPKを含むよう自動生成するためです。したがって、UPDATEやDELETEをsqlファイルやsqlコメントで行えば例外を回避できると思います。DAOがUPDATEやDELETEメソッドを持たない場合は、何か対応する必要はありません。テーブルにはPKを付けることを推奨します。19:30:14)Questionj2ee.diconでの設定を利用すれば自動的に1個のコネクションを得られます。複数DBとのコネクションを取得するにはどうすればよいのでしょうか。SelectableDataSourceProxyを使う方法もあります。19:26:23)Question複雑なSQLを処理する場合の実装方法について教え頂けませんでしょうか?Answer引数の値をSQL文に文字列として直接埋め込む。ドキュメントの「埋め込み変数コメント」を参照。ように「?」を含む演算子があります。'hoge';この演算子を使用したSQLを発行しようとすると、「?」がバインド変数とみなされて、java.sql.SQLExceptionが発生してしまいます。'hoge';となっています。正常に問い合わせが行われました。何かよい方法があれば、教えてください。OPERATOR文を使用して、新しく作成したOPERATORの中でpath_interを呼び出すことで、無事解決することができました。/*dto.aaa*/('aaa')というふうにコメントより後ろの括弧が必要。APIから知る方法が無いため、無理。java.sql.Statement#executeBatch()を使用しているのであれば、戻り値のint[]に各コマンドの実行結果が反映されているはずですよね?現実的には、1つのコマンドでも失敗すれば、全てのコマンドが失敗したような状態になってしまった記憶があります。JDBCドライバー次第ってことですね。http://ml.seasar.org/archives/seasar-user/2006-August/006205.htmlQuestionSQLのパラメータ?の部分に、以下のような文字列が入ってしまいます。http://ml.seasar.org/archives/seasar-user/2006-August/006139.html排他制御には、TimestampよりもVersionNoの方が良い。レコード更新時の時間を持ちたいのならば、トリガーを使うのが良いのでは。JavaBeansのプロパティをbyte[]型にしておくと、S2DaoはPreparedStatementに対してsetBinaryStream、ResultSetに対してgetBytesを呼び出すようになります。http://ml.seasar.org/archives/seasar-user/2006-October/006751.htmlOracleのThinドライバではPreparedStatement#setBinaryStream()がサポートされていないようで、java.sql.Blobを使うThinドライバではなくOCIドライバを使うと言った解決方法があるようです。※バージョンにもよると思いますので、追加情報をお持ちの方にコメント頂きたいです。