0

私のリストサイズは5000レコードで構成されています。リストから毎回100レコードを取得し、DBに最大5000レコードが永続化するたびに100レコードに永続化する必要があります。このロジックを実現するにはどうすればよいですか。

private  List<DoTempCustomers> doTempCustomers;
for(DoTempCustomers tempCustomers:doTempCustomers){
try {
    temp=new TempCustomers();               
    BeanUtils.copyProperties(temp, doTemp);
    getEntityManager().persist(temp);
}

上記のコードでは、ループごとに5000レコードすべてを単一で永続化しました。

4

3 に答える 3

1

リストをいくつかの部分に分割してから、各サブリストに対して操作を実行してみてください。リストを分割する方法が必要な場合は、次のリンクを参照してください:配列リストを等しい部分に分割する方法は?それはあなたにアイデアを与えます。

于 2012-12-06T10:17:45.870 に答える
0

subListのメソッドを使用Listして、List

private  List<DoTempCustomers> doTempCustomers;
//initialize doTempCustomers list
List<String> muSubList = doTempCustomers.subList(0, 100);
//this will return a view of the specified range 
//(here from 0 to 99, 0 -inclusive and 100 - exclusive) within this list

List#subListについてはJavadocを参照してください

于 2012-12-06T10:28:24.510 に答える
0

私は数日前に同じ問題を解決しました。私のサンプルコードは、あなたの場合は500ではなく、リストから毎回1000レコードを保存します。

    public void persistData(){

    int tempTblCount = tempTblCount();     // 5000 in your case
    int loopCount = tempTblCount / 1000 + 1;
    int limit = 1;

    while (loopCount > 0) {

       // here i get list of data from temp table having query limit;
       List<MyCustomerVO> myCustomerList = getListFromTempTblData(limit);

       for (iterate over your list) {
              persist your record here;
       }
    }

    limit = limit + 1000;
    loopCount--;

   }

    public List<MyCustomerVO> getListFromTempTblData(int limit) {

    List<MyCustomerVO> getTempTblData = null;
    String sql = " select mobile_number,customer_no from temp_tbl limit "+limit+" , 1000 ";
    execute query;
    return list;

    }
于 2012-12-06T10:52:13.347 に答える