Saya kesulitan memahami saat hibernasi mencapai cache tingkat kedua dan kapan hal itu membuat cache tidak valid.
Inilah yang saat ini saya pahami:
- Cache tingkat kedua menyimpan entitas antar sesi, cakupannya adalah SessionFactory
- Anda harus memberi tahu entitas mana yang akan disimpan dalam cache, tidak ada entitas yang akan di-cache secara default
- Cache kueri menyimpan hasil kueri di cache.
Yang tidak saya mengerti adalah
- Kapan hibernasi mencapai cache ini?
- Katakanlah saya telah menyiapkan cache tingkat kedua tetapi bukan cache kueri. Saya ingin menyimpan cache pelanggan saya, ada 50000 dari mereka. Dengan cara apa saya bisa mengambil pelanggan dari cache?
- Saya berasumsi saya bisa mendapatkannya dengan id dari cache. Itu akan mudah tetapi juga tidak layak untuk disimpan dalam cache. Tetapi bagaimana jika saya ingin melakukan perhitungan dengan semua pelanggan saya. Misalkan saya ingin menampilkan daftar pelanggan, lalu bagaimana saya mengaksesnya?
- Bagaimana cara mendapatkan semua pelanggan saya jika cache kueri dinonaktifkan?
- Apa yang akan terjadi jika seseorang memperbarui salah satu pelanggan?
- Akankah pelanggan itu menjadi tidak valid dalam cache atau apakah semua pelanggan akan dibatalkan?
Atau apakah saya berpikir cache salah? Apa penggunaan yang lebih tepat dari cache tingkat kedua dalam kasus itu? Dokumentasi hibernate sama sekali tidak jelas bagaimana cache bekerja pada kenyataannya. Hanya ada instruksi tentang cara menyiapkannya.
Pembaruan: Jadi saya telah memahami bahwa cache tingkat kedua (tanpa cache kueri) akan baik untuk memuat data dengan id. Misalnya saya memiliki objek pengguna yang ingin saya periksa izinnya di setiap permintaan dalam aplikasi web. Apakah ini kasus yang baik untuk mengurangi akses database dengan menyimpan pengguna dalam cache tingkat kedua? Seperti saya akan menyimpan id pengguna dalam sesi atau di mana pun dan ketika saya perlu memeriksa izin, saya akan memuat pengguna dengan id itu dan memeriksa izin.