Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Minha entidade Loja não está sendo cacheada

Prezados, bom dia

Eu coloquei no cache minha entidade Loja, porém mesmo assim a aplicação sempre continua indo no banco buscar a loja, como mostro no log abaixo:

Hibernate: select produto0_.id as id1_2_0_, produto0_.descricao as descrica2_2_0_, produto0_.linkDaFoto as linkDaFo3_2_0_, produto0_.loja_id as loja_id7_2_0_, produto0_.nome as nome4_2_0_, produto0_.preco as preco5_2_0_, produto0_.versao as versao6_2_0_, loja1_.id as id1_1_1_, loja1_.nome as nome2_1_1_ from Produto produto0_ left outer join Loja loja1_ on produto0_.loja_id=loja1_.id where produto0_.id=?
Hibernate: select categorias0_.Produto_id as Produto_1_2_0_, categorias0_.categorias_id as categori2_3_0_, categoria1_.id as id1_0_1_, categoria1_.nome as nome2_0_1_ from Produto_Categoria categorias0_ inner join Categoria categoria1_ on categorias0_.categorias_id=categoria1_.id where categorias0_.Produto_id=?
Hibernate: select loja0_.id as id1_1_0_, loja0_.nome as nome2_1_0_ from Loja loja0_ where loja0_.id=?
Hibernate: select loja0_.id as id1_1_0_, loja0_.nome as nome2_1_0_ from Loja loja0_ where loja0_.id=?

Como devo proceder para utilizar o cache?

4 respostas

Oi Antonio, tudo bem?

Você anotou a entidade? Habilitou o persistence.xml?

Alberto, boa noite.

Segue a minha entidade:

@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Loja {

E no projeto não está usando persistence.xml, tem uma classe chamada JpaConfigurator que pelo que eu entendi ela faz esse papel.

package br.com.caelum;

import java.beans.PropertyVetoException;
import java.util.Properties;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.hibernate.SessionFactory;
import org.hibernate.stat.Statistics;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

@Configuration
@EnableTransactionManagement
public class JpaConfigurator {

    @Bean
    public DataSource getDataSource() throws PropertyVetoException {
        // DriverManagerDataSource dataSource = new DriverManagerDataSource();
        //

        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost/projeto_jpa");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        dataSource.setMinPoolSize(5);
        dataSource.setMaxPoolSize(10);
        dataSource.setNumHelperThreads(5);

        return dataSource;
    }

    @Bean
    public Statistics statistics(EntityManagerFactory em){
        SessionFactory sessionFactory = em.unwrap(SessionFactory.class);
        return sessionFactory.getStatistics();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPackagesToScan("br.com.caelum");
        entityManagerFactory.setDataSource(dataSource);

        entityManagerFactory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

        Properties props = new Properties();

        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "create-drop");
        props.setProperty("hibernate.cache.use_second_level_cache", "true");
        props.setProperty("hibernate.cache.use_query_cache", "true");
        props.setProperty("hibernate.generate_statistics", "true");
        props.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
        entityManagerFactory.setJpaProperties(props);
        return entityManagerFactory;
    }

    @Bean
    public JpaTransactionManager getTransactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

}

Boa noite.

Alguém tem alguma resposta sobre esse assunto?

solução!

Opa, perdão pela demora. A dúvida passou pelos meus olhos. Eu acho que faltou configurar um provider de cachê de segundo nível.