[#m07b22ad][Seasar-user:5458]のスレッドを参照。[#ce7c8396]SQLファイルないしSQLアノテーションでSQLを記述してください。http://d.hatena.ne.jp/duran/20070119#p1**PosgreSQLとS2Pagerの組み合わせで、limitとoffsetを使用した高速取得使用時にSQLExceptionが発生する。[#d718f3a3]j2ee.dicon又はjdbc.diconの接続文字列にオプション「protocolVersion=2」を付いているか確認してください。[#t2696db0]戻り値を配列かListで宣言しているSelect系メソッドの場合は、要素数0の配列かListがreturnされます。nullではありません。[#r16e487f]現行のS2Daoの仕様です。これはバッチ更新の場合、複数レコードの更新・削除をまとめて行うためID値の取得を行うタイミングがないためです。(1件ずつINSERTする場合はINSERT文を発行する直前にSEQUENCEからnextvalを取得していますが、バッチ更新の場合はnextvalを取得するタイミングが無いため。)**OracleのNUBER型のカラムにBEAN側のInteger型プロパティを組み合わせると、Insert/Update時に値がとんでもなくなる(例8.3000000000000000000000000000000000E+83)場合がある。[#bcef7a42]OracleとJDBCドライバの組み合わせによって、この現象が起きることが報告されています。updateメソッドの初期化時に例外が発生しました。>[EDAO0009]test.dto.TestDto$$EnhancedByS2AOP$$423a423aにプライマリーキーが見つかりません原因は三つ考えられます。-TestDtoのTABLEアノテーションで指定したテーブルに、プライマリーキーがないか、ユニークキーのみ設定されている。-TABLEアノテーションで指定した''テーブル名が間違っている''。[#n8024f9b]リンク先の表をごらんください。[#ocd1ed37]IDアノテーションを使用してIDの自動設定を行う場合、Daoが使うDataSourceにトランザクションがかかっている必要があります。[#t3335ca5]データソース毎にisolationレベルを変更可能です。diconファイルにて、ConnectionPoolImplのtransactionIsolationLevelプロパティにConnection.TRANSACTION_SERIALIZABLEなどを指定してください。アプリケーション内で複数のtransactionIsolationLevelを使い分けたい場合は、複数のConnectionPoolImplをdiconで設定してください。**Daoのメソッド呼び出し時にorg.seasar.dao.MethodSetupFailureRuntimeExceptionが発生しました。[#j82206a8]この例外は、Daoのメソッドが最初に呼ばれたときに、''呼び出したメソッドでなく、Daoの全メソッドの中のいずれか''を初期化するときに例外になったことをさしています。例外メッセージ中に、例外の原因となったメソッドの名前が表示されているので、そのメソッドの定義を見直してください。[#kf22bc03]プライマリーキーのみのテーブルに対するDaoを作成したところ、以下のような例外が出ました。[EDAO0019]jp.roaso.dao.UsrgrpassignedDaoのupdateメソッドの初期化時に例外が発生しました。KeyのみのテーブルをSQL文の自動生成で更新することはできません更新SQLを自動生成しているメソッドを削除してください。?となり、SQL文として意味を成しません。このため、Daoの初期化時(Dao中のいずれかのメソッドが最初に呼ばれたとき)に、PKだけのテーブルに対してSQL文の自動生成を行うメソッドがあった場合には例外にするようになっています。[#r6bab544]j2ee.diconまたはjdbc.diconのPagerStaementFacotoryにbooleanToIntプロパティを追加してください。</component>~''参考投稿''~http://ml.seasar.org/archives/seasar-user/2006-March/005352.html~http://ml.seasar.org/archives/seasar-user/2006-March/005353.html~http://ml.seasar.org/archives/seasar-user/2006-March/005356.html~**SQLをツールで実行すると結果が取得できるのに、そのSQLをS2Dao経由で実行すると結果が取得できない。[#z51d0640]WHERE句でCHAR型のカラムを利用し、そのカラム定義と異なる長さの値をバインドしているとこの現象が起こる場合があります。[#bf14283e]exexuteQuery/executeUpdateで実行できるSQLなら、実行することができます。その場合、メソッドの名前をexexuteQueryなら検索、executeUpdateなら挿入/更新/削除の[[命名規則:http://s2dao.seasar.org/ja/s2dao.html#MethodNaming]]にあわせてください。オラクルは、[[DML:http://e-words.jp/w/DML.html]]以外をPreparedStatementで実行すると不安定になるので、S2Daoから実行するのは、やめたほうが良いと思います。truncateなどは、Statementで実行してください。#DataSourceから自前で処理するという意味です。[#gd054636]すべてのIFコメントがfalseと評価され、かつELSEコメントがない場合に起こります。対策としては次のような方法があります。[#ud82e9e3]S2Pagerのオフセットは「0」からはじまります。S2DAO_ROWNUMBERのように、オフセットで「0」を指定すると「1」ではじまるSQLが実行されますが、これは仕様となります。[#s8b646b9]S2PagerのOracleRownumPagingSqlRewriterはオリジナルのSQLをサブクエリとして実行します。B.DUMMYのように、同じカラム(エイリアス)をSELECTするSQLをOracleRownumPagingSqlRewriterを使用して実行すると、外側のクエリで列を特定できないためSQLExceptionになる場合があります。B.DUMMYのように標準SQLの結合構文の場合はエラーが出ませんが、今度はメタデータからカラム名を取得できないのでS2Dao側で値をセットできなくなりますので、クエリ内ではカラム名を必ず指定することをおすすめします。[#d9e86175]自動生成SQLや、*.sqlファイルへのバインドを使用する場合は、インジェクション対策は不要です。EntityManagerでSQL文を文字列結合して作成する場合です。"'"のようにSQLを組み立てる際に入力値をエスケープしてください。