2016-04-25 16 views
1

私はHibernateフレームワークの初心者です。私は永続性と更新の仕方が不思議です。hibernateを使ってデータをデータベースに永続化/更新する

私のプロジェクトでは、データのコレクションをデータベースに永続化または更新したいときに、私はループ方式で1つずつやっています。例えば、

public persistData(){ 
     List<Person> personList = new ArrayList<>(); 
     for(Person person : personList){ 
      session.persist(person); 
     } 
    } 

はにそれが可能であり、例えば、私はループせずに一度にデータの/更新コレクションを持続することができ、とにかく他の

session.persist(personList); 

それともあるのでしょうか?

Editted: 私は/更新存続のために、私はジェネリッククラスを開発していますバッチ処理 How to insert multiple rows into database using hibernate?Best way to insert a good amount of records in hibernate

で休止状態を発見した/休止状態を使用してデータを削除し、私が持つメソッドを提供しなければならない

public void (List<T> addedItemList) 

または

public void (T addedItem) 

m yの理解、大量のトランザクションは大量のトランザクションで行う必要がありますか?いくつかのオブジェクトが1つまたは2つしか永続化されない場合、バッチ処理はまだ適切ですか?

+1

まずは、http://hibernate.org/orm/(使用しているバージョンを選んでください)のドキュメントを読んでください。 –

+1

AFAIK一括更新方法はありません。 'for'ループをトランザクションにラップし、メソッドの最後にコミットすると効率的です。行数が多い場合は[バッチ挿入](https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html#batch-inserts)を使用してください。 – Bunti

答えて

0

ここで重要な点は、トランザクションを開始し、すべてを保持してからコミットすることです。あなたがコードでそれをやっているので@トランザクションを使わないでください。

   EntityManager em = entityManagerProvider.get(); 
//    em.clear();//remove this if caching is necessary 
       em.getTransaction().begin(); 
       for(buildings b:buildingsArray) { 
        em.persist(b); 
       } 
       em.getTransaction().commit(); 
関連する問題