Necesitaba ver si un registro estaba siendo cacheado por hibernate es decir JPA, en una aplicación spring boot.
Hice lo que cualquiera hubiera hecho, puse show-sql en true, corrí un test que busca 2 veces el registro y me fije en el log que no hubiera 2 selects. Fácil pero poco científico, estaría bueno hacer un test que pruebe esto, y bueno hice esto :
@RunWith(SpringJUnit4ClassRunner::class)
@SpringBootTest(classes = [Application::class])
class EjemploRepositoryTest {
@Autowired
lateinit var ejemploRepository: EjemploRepository
@Autowired
lateinit var entityManagerFactory: EntityManagerFactory
@Test
fun `find a Ejemplo from Empty cache`() {
val ejemplo= getEjemplo()
val cache = entityManagerFactory.cache
Assert.assertFalse(cache.contains(Ejemplo::class.java, ejemplo.id))
}
@Test
fun `find a Ejemplo from cache`() {
val ejemplo= getEjemplo()
saveAndFind(ejemplo)
val cache = entityManagerFactory.cache
Assert.assertTrue(cache.contains(Ejemplo::class.java, ejemplo.id))
}
private fun saveAndFind(ejemplo: Ejemplo): Ejemplo{
ejemploRepository.save(ejemplo)
return ejemploRepository.findById(ejemplo.id).get()
}
private fun getEjemplo(): Ejemplo{
return ... //Aca construimos un ejemplo
}
}
Y listo!!