Perbezaan Antara save () dan saveAndFlush () di Spring Data JPA

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan membincangkan perbezaan antara kaedah save () dan saveAndFlush () dalam Spring Data JPA.

Walaupun kedua-dua kaedah ini digunakan untuk menyimpan entiti ke pangkalan data, terdapat beberapa perbezaan asas.

2. Contoh Permohonan

Mari lihat dahulu cara menggunakan kaedah save () dan saveAndFlush () dengan contoh. Sebagai langkah pertama, mari buat kelas entiti:

@Entity public class Employee { @Id private Long id; private String name; // constructors // standard getters and setters }

Seterusnya, mari buat repositori JPA untuk operasi CRUD di kelas entiti Pekerja :

public interface EmployeeRepository extends JpaRepository { }

3. menjimatkan () Menghubungi

Seperti namanya, kaedah save () membolehkan kita menyimpan entiti ke DB . Ia tergolong dalam antara muka CrudRepository yang ditentukan oleh Spring Data. Mari lihat bagaimana kita boleh menggunakannya:

employeeRepository.save(new Employee(1L, "John"));

Biasanya, Hibernate menyimpan keadaan berterusan dalam ingatan. Proses menyegerakkan keadaan ini ke DB yang mendasari disebut flushing.

Apabila kita menggunakan kaedah save () , data yang terkait dengan operasi save tidak akan dialirkan ke DB kecuali dan sehingga kaedah panggilan eksplisit untuk flush () atau komit () dibuat .

Sekiranya kita menggunakan implementasi JPA seperti Hibernate, maka pelaksanaan khusus itu akan menguruskan operasi flush dan komit.

Satu perkara yang harus kita ingat di sini adalah bahawa, jika kita memutuskan untuk membuang data sendiri tanpa melakukan itu, maka perubahan tidak akan terlihat oleh transaksi luar kecuali panggilan komit dibuat dalam transaksi ini atau tahap pengasingan urus niaga luar DIBACA_UNCOMMITTED .

4. saveAndFlush () Menghubungi

Tidak seperti save () , yang saveAndFlush () kaedah menyingkirkan data serta-merta semasa pelaksanaan. Kaedah ini tergolong dalam antara muka JpaRepository Spring Data JPA. Inilah cara kami menggunakannya:

employeeRepository.saveAndFlush(new Employee(2L, "Alice"));

Biasanya, kami menggunakan kaedah ini apabila logik perniagaan kami perlu membaca perubahan yang disimpan di kemudian hari semasa transaksi yang sama tetapi sebelum melakukan.

Sebagai contoh, bayangkan senario di mana kita harus melaksanakan prosedur tersimpan yang mengharapkan harta benda entiti, yang akan kita simpan. Dalam kes ini, kaedah save () tidak akan berfungsi kerana perubahan tidak selari dengan DB dan prosedur yang disimpan tidak mengetahui tentang perubahan tersebut. Kaedah saveAndFlush () sangat sesuai untuk senario seperti ini.

5. Kesimpulan

Dalam artikel ringkas ini, kami memfokuskan perbezaan antara kaedah Spring Data JPA save () dan saveAndFlush () .

Dalam kebanyakan kes, kami akan menggunakan kaedah save () . Tetapi kadang-kadang, kita mungkin perlu menggunakan kaedah saveAndFlush () juga untuk kes penggunaan tertentu.

Seperti biasa, contoh pendek yang telah kita bincangkan di sini boleh didapati di GitHub.