ฉันมีปัญหาในการทำความเข้าใจเมื่อไฮเบอร์เนตถึงแคชระดับที่สองและเมื่อใดที่แคชไม่ถูกต้อง
นี่คือสิ่งที่ฉันเข้าใจในปัจจุบัน:
- แคชระดับที่สองเก็บเอนทิตีระหว่างเซสชันขอบเขตคือ SessionFactory
- คุณต้องบอกว่าเอนทิตีใดที่จะแคชไม่มีเอนทิตีใดจะถูกแคชโดยค่าเริ่มต้น
- แคชแบบสอบถามจะเก็บผลลัพธ์ของคิวรีไว้ในแคช
สิ่งที่ฉันไม่เข้าใจคือ
- เมื่อใดที่ไฮเบอร์เนตจะเข้าสู่แคชนี้
- สมมติว่าฉันได้ตั้งค่าแคชระดับที่สองแล้ว แต่ไม่ใช่การแคชแบบสอบถาม ฉันต้องการแคชลูกค้าของฉันมี 50000 คน ฉันจะดึงข้อมูลลูกค้าจากแคชด้วยวิธีใดได้บ้าง
- ฉันคิดว่าฉันสามารถรับได้โดย id จากแคช ซึ่งจะเป็นเรื่องง่าย แต่ก็ไม่คุ้มค่ากับการแคช แต่ถ้าฉันต้องการคำนวณกับลูกค้าทั้งหมดของฉัน สมมติว่าฉันต้องการแสดงรายชื่อลูกค้าแล้วฉันจะเข้าถึงได้อย่างไร
- ฉันจะหาลูกค้าทั้งหมดได้อย่างไรหากปิดใช้งานการแคชแบบสอบถาม
- จะเกิดอะไรขึ้นหากมีคนอัปเดตลูกค้ารายใดรายหนึ่ง
- ลูกค้ารายนั้นจะถูกทำให้แคชเป็นโมฆะหรือลูกค้าทั้งหมดจะไม่ถูกต้อง
หรือฉันคิดว่าการแคชผิดทั้งหมด? การใช้แคชระดับที่สองจะเหมาะสมกว่าในกรณีนี้อย่างไร เอกสารไฮเบอร์เนตไม่ชัดเจนเลยว่าแคชทำงานอย่างไรในความเป็นจริง มีเพียงคำแนะนำในการตั้งค่าเท่านั้น
อัปเดต: ดังนั้นฉันจึงเข้าใจว่าแคชระดับที่สอง (ไม่มีแคชแบบสอบถาม) จะดีสำหรับการโหลดข้อมูลโดยใช้รหัส ตัวอย่างเช่นฉันมีวัตถุผู้ใช้ที่ฉันต้องการตรวจสอบสิทธิ์ในทุกคำขอในเว็บแอปพลิเคชัน นี่เป็นกรณีที่ดีหรือไม่ที่จะลดการเข้าถึงฐานข้อมูลโดยการแคชผู้ใช้ในแคชระดับที่สอง เช่นเดียวกับที่ฉันจะจัดเก็บ ID ผู้ใช้ในเซสชันหรือที่ใดก็ตามและเมื่อฉันต้องการตรวจสอบสิทธิ์ฉันจะโหลดผู้ใช้โดยใช้รหัสและตรวจสอบสิทธิ์