

Perpustakaan dan standar
52. Apa itu Hibernasi? Apa perbedaan antara JPA dan Hibernasi?
Untuk menjawab pertanyaan ini, saya rasa kita perlu memahami terlebih dahulu apa itu JPA. Ini adalah spesifikasi yang menjelaskan pemetaan objek-relasional dari objek Java sederhana dan menyediakan API untuk menyimpan, mengambil, dan memanipulasi objek tersebut. Artinya, database relasional (DB) direpresentasikan sebagai sekumpulan tabel yang saling berhubungan. Dan JPA adalah standar yang diadopsi secara luas yang menjelaskan bagaimana objek dapat berinteraksi dengan database relasional. Seperti yang Anda lihat, JPA adalah sesuatu yang abstrak dan tidak berwujud. Ini seperti ide itu sendiri, pendekatannya.
53. Apa itu mengalir? Bagaimana cara menggunakannya di Hibernate?
Seperti yang saya katakan sebelumnya, komunikasi di Hibernate terjadi melalui objek data yang disebut entitas. Entitas ini mewakili tabel tertentu dalam database, dan seperti yang Anda ingat, kelas Java dapat berisi referensi ke kelas lain. Hubungan ini juga tercermin dalam database. Biasanya, ini adalah kunci asing (untuk hubungan OneToOne, OneToMany, ManyToOne) atau tabel perantara (untuk hubungan ManyToMany). Jika entitas Anda memiliki referensi ke entitas terkait lainnya, anotasi ditempatkan di atas referensi ini untuk menunjukkan jenis hubungan: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany. Anda dapat menentukan jenis kaskade untuk hubungan ini di properti kaskade anotasi. JPA memiliki metode khusus untuk berinteraksi dengan entitas (bertahan, menyimpan, menggabungkan ...). Tipe kaskade digunakan untuk memperlihatkan bagaimana seharusnya data terkait berperilaku; metode ini digunakan pada entitas target. Jadi apa saja strategi cascading (tipe cascade)? Standar JPA menyediakan penggunaan enam jenis kaskade:-
PERSIST — operasi penyimpanan terjadi secara berjenjang (untuk metode save() dan persist() ). Dengan kata lain, jika kita menyimpan suatu entitas yang berasosiasi dengan entitas lain, maka entitas tersebut juga akan tersimpan di database (kalau belum ada)
-
MERGE — operasi pembaruan terjadi secara berjenjang (untuk metode merge() )
-
HAPUS — operasi penghapusan terjadi secara berjenjang ( metode hapus() )
-
ALL — berisi tiga operasi berjenjang sekaligus — PERSIST — MERGE — REMOVE
-
DETACH — entitas terkait tidak dikelola oleh sesi ( metode detach() ). Artinya, ketika data entitas terkait diubah, data dalam database tidak diperbarui secara otomatis — data tersebut diubah dari persisten menjadi terpisah (yaitu entitas tidak dikelola oleh JPA)
-
REFRESH — setiap kali suatu entitas disegarkan dengan data dari database ( refresh() — menyegarkan objek yang terpisah), entitas terkaitnya juga disegarkan. Misalnya, Anda entah bagaimana mengubah data yang diambil dari database, dan Anda ingin mengembalikan nilai aslinya. Dalam hal ini, operasi ini akan berguna bagi Anda.

-
REPLICATE — digunakan ketika kita memiliki lebih dari satu sumber data dan kita ingin datanya disinkronkan (metode replikasi Hibernate). Semua entitas harus memiliki pengidentifikasi (id) untuk memastikan bahwa mereka dapat dibuat tanpa masalah (untuk memastikan bahwa entitas yang sama tidak memiliki id yang berbeda untuk database yang berbeda)
-
SAVE_UPDATE — menyimpan/menghapus secara berjenjang (untuk metode saveOrUpdate Hibernate )
-
LOCK — kebalikan dari operasi DETACHED : mengubah entitas yang terlepas kembali ke status persisten, yaitu sesi saat ini akan melacak entitas tersebut sekali lagi
54. Bisakah kelas Entitas bersifat abstrak?
Menurut 2.1 Kelas Entitas spesifikasi JPA , " Kelas abstrak dan konkret dapat berupa entitas. " Jadi, jawabannya adalah ya, kelas abstrak dapat menjadi entitas dan dapat ditandai dengan anotasi @Entity.55. Apa yang dimaksud dengan manajer entitas? Apa tanggung jawabnya?
Pertama-tama, saya ingin mencatat bahwa EntityManager adalah komponen penting dari JPA . Ini digunakan untuk interaksi entitas dengan database. Secara umum, metode interaksi entitas dengan database dipanggil pada entitas (bertahan, menggabungkan, menghapus, melepaskan)... Namun saya juga mencatat bahwa komponen ini biasanya bukan komponen tunggal untuk keseluruhan aplikasi. Seringkali ringan, satu dihapus, dan yang baru dibuat menggunakan EntityManagerFactory . Jika kita menggambar paralel dengan JDBC , di mana EntityManagerFactory dianalogikan dengan DataSource , maka EntityManager dianalogikan dengan Connection . Sebelumnya saya telah menyebutkan bahwa entitas persisten adalah entitas yang dikelola oleh koneksi saat ini. Entitas ini dikelola oleh EntityManager , yang terkait erat dengan koneksi saat ini, dan TransactionManager , yang bertanggung jawab atas pembukaan/penutupan transaksi. Pada gambar di bawah, Anda dapat melihat siklus hidup entitas:
56. Apa yang dimaksud dengan kelas Assert? Mengapa ini digunakan?
Saya belum pernah mendengar kelas seperti itu di JPA , jadi saya berasumsi bahwa pertanyaan ini merujuk pada kelas yang ditemukan di perpustakaan JUnit yang digunakan untuk pengujian unit. Di perpustakaan ini, kelas Assert digunakan untuk memeriksa hasil eksekusi kode (di sini pernyataan berarti pernyataan bahwa Anda memiliki status/data tertentu di lokasi tertentu dalam kode). Misalnya, Anda sedang menguji metode yang seharusnya membuat kucing. Anda menjalankan metode ini dan Anda mendapatkan beberapa hasil:Cat resultOfTest = createCat();
Tapi Anda perlu memastikan itu dibuat dengan benar, bukan? Jadi, Anda secara manual membuat cat tertentu ( expectedCat ) dengan parameter persis seperti yang Anda harapkan pada cat yang diperoleh dari metode createCat() . Kemudian Anda menggunakan kelas Assert untuk memverifikasi hasilnya:
Assert.assertEquals(resultOfTest, expectedCat);
Jika kucingnya berbeda, maka AssertionError akan muncul, yang memberi tahu kita bahwa kita tidak mendapatkan hasil yang diharapkan. Kelas Assert memiliki banyak metode berbeda yang mencakup berbagai operasi yang berguna dalam memverifikasi hasil yang diharapkan. Berikut ini beberapa di antaranya:
-
menegaskanTrue(<boolean>) — nilai yang dimasukkan sebagai argumen diharapkan benar
-
menegaskanFalse(<boolean>) — nilai yang dimasukkan sebagai argumen diperkirakan salah
-
menegaskanNotEquals(<object1>, <object2>) — objek yang diteruskan sebagai argumen harus berbeda jika dibandingkan menggunakan sama dengan ( false )
-
menegaskanThrows(<ClassNameOfException>.class, <ExceptionObject>) — argumen kedua diharapkan menjadi pengecualian yang diberikan oleh argumen pertama (yaitu argumen kedua biasanya merupakan pemanggilan metode yang harus memunculkan pengecualian dari tipe yang diperlukan)
Rangkaian
57. Jelaskan kelas String Java
String adalah kelas Java standar yang bertanggung jawab untuk menyimpan dan memanipulasi nilai string (urutan karakter). Ini adalah kelas yang tidak dapat diubah (saya menulis tentang yang tidak dapat diubah sebelumnya di sini ), yaitu, data objek kelas ini tidak dapat diubah setelah dibuat. Saya ingin segera mencatat bahwa kelas StringBuilder dan StringBuffer pada dasarnya identik - satu-satunya perbedaan adalah bahwa salah satunya dimaksudkan untuk digunakan dalam lingkungan multithread ( StringBuffer ). Kelas-kelas ini mirip dengan String , tetapi berbeda karena kelas-kelas ini dapat berubah . Bahkan setelah dibuat, mereka membiarkan Anda memodifikasi string yang diwakilinya, tanpa membuat objek baru. Metode mereka berbeda dari metode String standar dan dirancang untuk manipulasi string (ada alasan mengapa mereka menyebutnya pembangun).58. Bagaimana cara membuat objek String? Dimana itu dibuat?
Cara paling umum untuk membuat string adalah dengan menentukan nilai yang kita inginkan dalam tanda kutip ganda secara sederhana:String str = "Hello World!";
Anda juga dapat melakukannya secara eksplisit menggunakan new :
String str = new String("Hello World!");
Anda juga dapat membuat string dari serangkaian karakter:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
Kita dapat melakukannya dengan memanggil metode toString pada beberapa objek:
String str = someObject.toString();
Kita dapat melakukannya dengan memanggil metode lain yang mengembalikan sebuah string. Contoh:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
Anda memahami bahwa ada banyak sekali cara untuk membuat string. Saat objek String dibuat, objek tersebut disimpan dalam kumpulan string , yang akan kita bahas lebih detail di salah satu pertanyaan di bawah ini.
59. Bagaimana Anda membandingkan dua string Java, dan bagaimana Anda mengurutkannya?
Java menggunakan tanda sama dengan ganda ( == ) untuk melakukan perbandingan. Jika kita perlu membandingkan nilai sederhana seperti int, kita akan menggunakannya. Tetapi metode ini tidak cocok untuk membandingkan objek secara keseluruhan. Ia hanya akan membandingkan referensi, yaitu apakah referensi tersebut menunjuk pada objek yang sama atau tidak. Artinya jika kita membandingkan dua objek dengan nilai bidang yang sama menggunakan == , kita akan mendapatkan false . Bidang-bidang tersebut memiliki nilai yang sama, tetapi objek-objek itu sendiri menempati lokasi berbeda dalam memori. Objek string , meskipun tampak sederhana, tetaplah objek. Membandingkannya menggunakan == juga tidak tepat (meskipun ada kumpulan string). Solusi yang tepat adalah metode sama dengan standar kelas Object , yang perlu ditimpa agar berfungsi dengan benar (secara default, metode ini menggunakan == untuk perbandingan). Kelas String menimpanya, jadi kita hanya menggunakan implementasinya:String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);

TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
Keluaran konsol:
60. Berikan algoritma untuk mengubah string menjadi karakter. Tulis kode yang sesuai
Seperti yang saya katakan sebelumnya, objek String memiliki banyak metode berguna yang berbeda. Salah satunya adalah toCharArray . Metode ini mengubah string menjadi array karakter:String str = "Hello world";
char[] charArr = str.toCharArray();
Selanjutnya, kita memiliki serangkaian karakter yang dapat kita referensikan berdasarkan indeks:
char firstChar = charArr[0]; // H
61. Bagaimana Anda mengubah string menjadi array byte dan sebaliknya? Tulis kode yang sesuai
Kelas String memiliki metode getBytes , yang mirip dengan metode toCharArray dan mengembalikan string sebagai array byte:String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
Kami telah sampai pada kesimpulan logis dari ulasan kami hari ini. Terima kasih sudah membaca!
GO TO FULL VERSION