Uso de cache com hibernate

5 respostas
V

Como está o seu mapeamento ? esta correto ?

5 Respostas

rodrigo_gomes

Na hora em que vc digitou no seu xml (hibernate-config) nao deixou escapar nenhuma letrinha extra nao? Ele tah reclamando do xml…

berdam

Galera, tenho uma classe chamada empresa que é cacheada.

@Entity @Table(name = "empresa") @org.hibernate.annotations.Cache(usage=org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE) @NamedQueries( {

Estou usando o EhCache como fornecedor de cache.

Estou usando a propriedade

que desabilita o mapeamentos do cache, deste modo, todo o cache é desabilitado da aplicação,
(ao contrário seria necessário eu passar em todos os arquivos e retirar os mapeamentos de cahce)
mas quando rodar a aplicação, aparece este erro.

Exception in thread "main" java.lang.ExceptionInInitializerError at banco.HibernateUtil.<clinit>(HibernateUtil.java:45) at Main.Main.main(Main.java:36) Caused by: org.hibernate.MappingException: invalid configuration at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1487) at org.hibernate.cfg.Configuration.configure(Configuration.java:1428) at banco.HibernateUtil.<clinit>(HibernateUtil.java:43) ... 1 more Caused by: org.xml.sax.SAXParseException: The content of element type "session-factory" must match "(property*,mapping*,(class-cache|collection-cache)*,event*,listener*)". at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2017) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:901) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1772) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2923) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.dom4j.io.SAXReader.read(SAXReader.java:465) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1484) ... 3 more

Alguém tem alguma idéia do que possa ser???

berdam

Se vc diz a respeito dos mapeamentos das classes. Eu acredito que sim, pois que eu tiro todas as coisas relacionadas ao cache, ele insere normalmente.

berdam

Eu estou usando o ehcache, pelo que li apenas o colocando ele no path e chamando

true

é pra funcionar.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- properties -->
        <property name="connection.driver_class">       com.mysql.jdbc.Driver   </property>
        <property name="connection.url">    jdbc:mysql://localhost:3306/mono    </property>
        <property name="dialect">     org.hibernate.dialect.MySQLDialect      </property>
        <property name="show_sql">true</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">10</property>
        
        <!--Pool de conexões-->
        
        <property name="hibernate.c3p0.min_size">5</property>  
        <property name="hibernate.c3p0.max_size">20</property>  
        <property name="hibernate.c3p0.timeout">300</property>  
        <property name="hibernate.c3p0.max_statements">50</property>  
        <property name="hibernate.c3p0.idle_test_period">3000</property>  
        
        <!-- Mostra o sql -->  
        <property name="show_sql">true</property> 
        <!-- Saída mais legível -->  
        <property name="format_sql">true</property>  
        <!-- Mostra de onde os sqls vem -->  
        <property name="use_sql_comments">true</property>  
        
        <!-- mapping classes -->
        <mapping class="model.Cliente" />
        <mapping class="model.Pedidocliente" />
        <mapping class="model.Empresa" />
        
        
        
        <!-- Cache  -->           
        <property name="hibernate.cache.use_second_level_cache">true</property>         
        
        
    </session-factory>
</hibernate-configuration>
berdam

Galera, acho que descobri o erro, eu mudei a parte onde defino os caches e coloquei no início do arquivo xml do hibernate, fiz dois testes, aqui um em cima e outro embaixo, realmente aquele que está em cima funciona,

Funcionou desta maneira

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        
        
        <!-- Cache  -->           
        <property name="hibernate.cache.use_second_level_cache">true</property>   
        <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>
     
        
        <!-- properties -->
        <property name="connection.driver_class">       com.mysql.jdbc.Driver   </property>
        <property name="connection.url">    jdbc:mysql://localhost:3306/mono    </property>
        <property name="dialect">     org.hibernate.dialect.MySQLDialect      </property>
        <property name="show_sql">true</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">10</property>
        
        <!--Pool de conexões-->
        
        <property name="hibernate.c3p0.min_size">5</property>  
        <property name="hibernate.c3p0.max_size">20</property>  
        <property name="hibernate.c3p0.timeout">300</property>  
        <property name="hibernate.c3p0.max_statements">50</property>  
        <property name="hibernate.c3p0.idle_test_period">3000</property>  
        
        <!-- Mostra o sql -->  
        <property name="show_sql">true</property> 
        <!-- Saída mais legível -->  
        <property name="format_sql">true</property>  
        <!-- Mostra de onde os sqls vem -->  
        <property name="use_sql_comments">true</property>  
        
        <!-- mapping classes -->
        <mapping class="model.Cliente" />
        <mapping class="model.Pedidocliente" />
        <mapping class="model.Empresa" />    
        
        
        
        
        
    </session-factory>
</hibernate-configuration>
Criado 29 de abril de 2008
Ultima resposta 1 de mai. de 2008
Respostas 5
Participantes 3