Domanda

Probabilmente si tratta di una questione fondamentale, ma non riusciva a trovare la risposta ovunque nel web.

Sto cercando di utilizzare una cache di secondo livello (utilizzando EHCache) e appena verificato che alcuni oggetti erano stati recuperati dal database ogni volta che ho provato a caricarli, l'unica differenza è che non ero li sempre da id ma da una proprietà che porta un nome di SEO che vengono utilizzati per creare gli URL sul sistema sto lavorando. È JPA / ibernazione in grado di recuperare gli oggetti dalla cache semplicemente con l'id del obj? C'è un modo per farlo funzionare senza bisogno di attivare la cache delle query?

È stato utile?

Soluzione

  

Is JPA / Hibernate in grado di recuperare gli oggetti dalla cache semplicemente con l'id del obj?

Sì, la cache di secondo livello funziona per query che look per un singolo oggetto basato su Id cioè quando utilizza EntityManager.find() o EntityManager.getReference() (o equivalente Session#get() e Session#load() dall'API Sospensione). Per quanto ne so, questo vale per tutte le implementazioni JPA.

  

C'è un modo per farlo funzionare senza bisogno di attivare la cache delle query?

Con APP di serie, non vedo alcuna altra scelta che utilizzare la cache delle query.

Ma se non ti dispiace usando Hibernate API, ci potrebbe essere un'alternativa con Query#iterate() . Con Query#iterate() , Hibernate emetterà una query SQL che prendere solo gli ID e quando eseguire iterazioni sui risultati, caricherà le entità corrispondenti dalla cache.

Ovviamente, Query#iterate() sarà molto più lento di quanto Query#list() se non si sta utilizzando un secondo livello di cache.

Personalmente, mi piacerebbe utilizzare la cache delle query.

Vedi anche

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top