Uploaded image for project: 'S2Dao'
  1. S2Dao
  2. DAO-9

[Seasar-user:3815] バッチ更新(insert)時に1件目がnull値であるカラムが2件目以降も除外されてしまう

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major Major
    • 1.0.35
    • Affects Version/s: 1.0.34
    • Component/s: s2dao
    • None
    • Environment:
      S2Dao 1.0.34
      S2Container 2.3.10

      現在、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] 物理的なコネクションを閉じました
      

            Assignee:
            manhole manhole
            Reporter:
            manhole manhole
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: