Boa tarde a todos. Tenho muitas duvidas em relacao ao meu projeto, a de momento e referente ao cache de segundo nivel. Nao tenho muita certeza se a estrategia
que tomei e a correta, se esta me ajudando ou se ao inves disso esta gastando mais memoria. Vou expor a situacao e as duvidas.
Tenho uma Entidade Categoria, que por sua vez tem uma lista de SubCategoria. Em todas as telas do meu projeto faco uso de todas as categorias com suas
respectivas subcategorias persistidas no banco. Sendo assim acho que seria viavel alem de deixar um relacionamento do tipo EAGER entre as duas, fazerum cache de segundo nivel pra essa lista de categorias. o que voces acham dessa estrategia?? Porque eu achar viavel nao quer realmente dizer seja, por isso a opniao de voces seria
muito bem-vinda.
Ate implementei esse cache de segundo nivel mas me parece que nao esta funcionando.
sql’s gerado pelo hibernate no primeiro acesso a lista
Hibernate:
select
this_.id_categoria as id1_3_1_,
this_.nome as nome3_1_,
subcategor2_.id_categoria as id3_3_,
subcategor2_.id_sub_categoria as id1_3_,
subcategor2_.id_sub_categoria as id1_4_0_,
subcategor2_.nome as nome4_0_,
subcategor2_.id_categoria as id3_4_0_
from
categoria this_
left outer join
sub_categoria subcategor2_
on this_.id_categoria=subcategor2_.id_categoria
segundo acesso a lista vem a mesma coisa
Hibernate:
select
this_.id_categoria as id1_3_1_,
this_.nome as nome3_1_,
subcategor2_.id_categoria as id3_3_,
subcategor2_.id_sub_categoria as id1_3_,
subcategor2_.id_sub_categoria as id1_4_0_,
subcategor2_.nome as nome4_0_,
subcategor2_.id_categoria as id3_4_0_
from
categoria this_
left outer join
sub_categoria subcategor2_
on this_.id_categoria=subcategor2_.id_categoria
e aqui estao as configuracoes referentes as classes cacheadas e xmls
Classe Categoria
@Entity
@Table
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class CategoriaPeca extends model.Entity {
@OneToMany(mappedBy = "categoria", targetEntity = SubCategoriaP.class, fetch = FetchType.EAGER)
@Cascade(CascadeType.ALL)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
private List<SubCategoriaPeca> subCategoriaPecas;
}
ehcache.xml
<ehcache>
<diskStore path="java.io.tmpdir" />
<cache
name="model.Categoria"
maxElementsInMemory="100"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="false" />
<defaultCache
maxElementsInMemory="500"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false" />
</ehcache>
hibernate.cfg.xml
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
<property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
pesquisei bastante atras de algum erro, nao sei passou despercebido mas nao encontrei, qualquer ajuda e de grande valos…