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 }
Untuk mendayakan batching dalam Hibernate, kami perlu menambah harta pada aplikasi kami
properties fail:spring.jpa.properties.hibernate.jdbc.batch_size=3
Kini, kita perlu melaksanakan fungsi berterusan EntityManageruntuk memasukkan data ke dalam pangkalan data
@Autowired private EntityManager entityManager; @Test Public void InsertInBatch(){ for (int i = 0; i < 6; i++) { Parent parent = Parent[i]; entityManager.persist(parent); } }
"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"]]
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
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); } }
Hibernate kini akan menggabungkan penyata ini dalam satu kelompok dan melaksanakannya.
"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"]]
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!