Rumah > Java > javaTutorial > teks badan

Bagaimana untuk melaksanakan operasi kemas kini sisipan pukal dalam Hibernate?

WBOY
Lepaskan: 2023-08-27 23:17:06
ke hadapan
1354 orang telah melayarinya

Bagaimana untuk melaksanakan operasi kemas kini sisipan pukal dalam Hibernate?

Dalam artikel ini, kita akan melihat cara melakukan sisipan/kemas kini pukal dalam Hibernate.

Setiap kali kami melaksanakan pernyataan sql, kami melakukannya dengan membuat panggilan rangkaian ke pangkalan data. Sekarang, jika kita perlu memasukkan 10 entri ke dalam jadual pangkalan data, maka kita perlu membuat 10 panggilan rangkaian. Sebaliknya, kami boleh mengoptimumkan panggilan rangkaian dengan menggunakan pemprosesan kelompok. Pemprosesan kelompok membolehkan kami melaksanakan satu set pernyataan SQL dalam satu panggilan rangkaian.

Untuk memahami dan melaksanakan perkara ini, mari kita tentukan entiti kita −

@Entity
public class Parent {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private long id;
   private String name;
   // Getters
   //Setters
}
Salin selepas log masuk

Untuk mendayakan batching dalam Hibernate, kami perlu menambah harta pada aplikasi kami

properties fail:

spring.jpa.properties.hibernate.jdbc.batch_size=3
Salin selepas log masuk

Kini, kita perlu melaksanakan fungsi berterusan EntityManageruntuk memasukkan data ke dalam pangkalan data

Contoh

@Autowired
private EntityManager entityManager;
@Test
Public void InsertInBatch(){
   for (int i = 0; i < 6; i++) {
      Parent parent = Parent[i];
      entityManager.persist(parent);
   }
}
Salin selepas log masuk

Output

"batch":true, "querySize":1, "batchSize":3, "query":["insert into parent (name, id) values (?, ?)"], "params":[["P1","1"],["P2","2"],["P3","3"]]
"batch":true, "querySize":1, "batchSize":3, "query":["insert into parent (name, id) values (?, ?)"], "params":[["P4","4"],["P5","5"],["P6","6"]]
Salin selepas log masuk

Dari konsol kita dapat melihat bahawa pemasukan ke dalam jadual induk dilakukan dengan saiz kelompok 3.

Apabila entiti berterusan, OutOfMemoryException mungkin berlaku kerana Hibernate menyimpan entiti dalam konteks kegigihan. Oleh itu, untuk tujuan pengoptimuman, kami boleh menggunakan pengurus entiti flush() dan clear() selepas setiap kelompok.

Kemas kini kelompok bermaksud mengemas kini sejumlah besar data dalam satu panggilan rangkaian.

Untuk kemas kini batch, prosesnya adalah sama. Kita perlu menambah dua pernyataan berikut dalam fail sifat aplikasi dan kemudian melaksanakan proses kemas kini.

spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.batch_versioned_data=true
Salin selepas log masuk

Contoh

Kod untuk mengemas kini data−

@Autowired
private EntityManager entityManager;
@Test
public void UpdateInBatch() {
   TypedQuery<Parent> query = entityManager.createQuery("SELECT p from Parent p", Parent.class);
   List<Parent> Parents = query.getResultList();
   int i=1;
   for (Parent parent : Parents) {
      String s="Parent"+Integer.toString(i);
      i++;
      parent.setName(s);
   }
}
Salin selepas log masuk

Hibernate kini akan menggabungkan penyata ini dalam satu kelompok dan melaksanakannya.

Output

"batch":true, "querySize":1, "batchSize":3, "query":["update parent set name=? where id=?"], "params":[["Parent1","1"],[" Parent2","2"],[" Parent3","3"]]
"batch":true, "querySize":1, "batchSize":3, "query":["update parent set name=? where id=?"], "params":[["Parent4","4"],["Parent5","5"],["Parent6","6"]]
Salin selepas log masuk

Seperti yang anda lihat dari konsol, kemas kini data dalam jadual induk dilakukan dengan saiz kelompok 3.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan operasi kemas kini sisipan pukal dalam Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan