現在、S2Dao 1.0.34, S2Container 2.3.10にあげるべく確認中です。
ところが、S2Daoでバッチ更新を行う際に、以下の機能のために期待した
結果が得られません。
[Seasar-user:3549] S2Dao 1.0.33 リリース
- 自動生成されるINSERT文から、beanのプロパティがnullのカラム
を除外するようにしました。これにより、Tableへ定義してある
DEFAULT値を活かすことができます。
この機能は、バッチ更新の際に、引数のリストのインデックス0のインス
タンスの内容をもとにSQLを組み立てているようですが、それ以降の
インデックスのインスタンスのプロパティがnullでないときも、値が
セットされなくなってしまいます。
何か対処法はありますでしょうか?
– 検証用コード(抜粋)とログ
– Bean
public class Test { public static final String TABLE = "TEST_TBL"; private int seqno; private String pname; private Timestamp odate; public Test() { } /*getter, setter割愛*/ }
– Dao
public interface TestDao { public static final Class BEAN = Test.class; public int insert(List list); }
– テストメソッド
public void testInsert_Tx() { List list = new ArrayList(); Test t1 = new Test(); t1.setSeqno(1); t1.setPname(null); t1.setOdate(null); Test t2 = new Test(); t2.setSeqno(2); t2.setPname("hoge"); t2.setOdate(new Timestamp(Calendar.getInstance().getTimeInMillis())); list.add(t1); // 順番を list.add(t2); // かえる dao.insert(list); // 期待外のSQL文 list.clear(); t1.setSeqno(3); t2.setSeqno(4); list.add(t2); // 順番を list.add(t1); // かえる dao.insert(list); // 期待していたSQL文 }
– ログ
DEBUG 2006-06-08 21:24:17,975 [main] トランザクションを開始しました DEBUG 2006-06-08 21:24:18,068 [main] 物理的なコネクションを取得しました DEBUG 2006-06-08 21:24:18,146 [main] 論理的なコネクションを取得しました DEBUG 2006-06-08 21:24:18,537 [main] 論理的なコネクションを閉じました DEBUG 2006-06-08 21:24:18,537 [main] 論理的なコネクションを取得しました DEBUG 2006-06-08 21:24:18,553 [main] INSERT INTO TEST_TBL (seqno) VALUES (1) DEBUG 2006-06-08 21:24:18,568 [main] INSERT INTO TEST_TBL (seqno) VALUES (2) DEBUG 2006-06-08 21:24:18,568 [main] 論理的なコネクションを閉じました DEBUG 2006-06-08 21:24:18,568 [main] 論理的なコネクションを取得しました DEBUG 2006-06-08 21:24:18,584 [main] INSERT INTO TEST_TBL (seqno, pname, odate) VALUES (4, 'hoge', '2006-06-08 21.24.17') DEBUG 2006-06-08 21:24:18,600 [main] INSERT INTO TEST_TBL (seqno, pname, odate) VALUES (3, null, null) DEBUG 2006-06-08 21:24:18,600 [main] 論理的なコネクションを閉じました DEBUG 2006-06-08 21:24:18,600 [main] トランザクションをロールバックしました DEBUG 2006-06-08 21:24:18,709 [main] 物理的なコネクションを閉じました