como que eu consigo colocar o arquivo hibernate.properties para acessar o banco e o arquivo hibernate.cfg.xml para mapearem as classes… existe alguma configuração específica pos o meu sistema não consegue encontrar as classes mapeadas no hibernate.cfg.xml. Segue o codigo:
hibernate.properties
[code]# Configurações personalizáveis para o Hibernate
Mostrar SQL gerado ?
hibernate.show_sql = false
Exportar o Schema para o BD ?
hibernate.hbm2ddl.auto = update
#Configuracao do cache de segundo nivel
net.sf.ehcache.configurationResourceName=ehcache.xml
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true #que isso sera? #hibernate.cache.use_structured_entries=true #hibernate.generate_statistics=true
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="hibernate.connection.url">jdbc:hsqldb:file:mydvdsDB</property>
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>-->
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup
tem que deixar essa propriedade ativa apos alguma modificação nas
tabelas ou no mapeamento, e depois comentar novamente, pois ela apaga
o que tem na tabela -->
<property name="hbm2ddl.auto">update</property>
<mapping class="hiberapp0.Shinigami"/>
<mapping class="hiberapp0.Evento"/>
</session-factory>
</hibernate-configuration>
é estava deste jeito mas começou a contecer um problema de concorrencia entre as classes a serem persistidas… meio que uma classes estava acessando a outra.
Bem, isto vai depender de como está o resto da sua aplicação, no meu caso eu utilizo um Interceptador do VRaptor para instanciar meu DaoFactory e ejeto o mesmo - @Out
package com.lmsisman.interceptor;
import org.inca.dao.util.DaoFactory;
import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Parameter;
import org.vraptor.view.ViewException;
/**
* Interceptador para criar uma fábrica de daos.
*
* Componentes que usam esse interceptador (@InterceptedBy(DaoInterceptor.class)
* vão passar pelo método intercept(...) nessa classe. Eles recebem a fábrica que dá
* acesso nos daos e banco de dados.
*/
public class DaoInterceptor implements Interceptor {
@Out(key = "org.inca.dao.util.DaoFactory")
private DaoFactory factory;
public void intercept(LogicFlow flow) throws LogicException, ViewException {
factory = DaoFactory.getNewDaoFactory();
try {
flow.execute();
} catch (LogicException e) {
throw e;
} finally {
if (factory.hasTransaction()) {
factory.rollbackTransaction();
}
factory.getSession().close();
}
}
}
Além disso é preciso adicionar um Listener para inicializar a sessão a partir do contexto da aplicação.
package org.inca.dao.util;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class HibernateListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
or.inca.dao.util.HibernateSessionFactory.getSessionFactory();
}
public void contextDestroyed(ServletContextEvent event) {
org.inca..dao.util.HibernateSessionFactory.closeSession();
}
}
public class ElementoComponent {
private DaoFactory factory;
public ElementoComponent(DaoFactory factory) {
this.factory = factory;
}
public void create(Elemento e){
this.factory.getElementoDao().create(e);
}
}
É isto… parece complexo, e é na verdade, mas só no início, depois vc li-te-ral-men-te nem lembra que tudo isto existe e parte para pensar só na sua lógica de negócio e muito, muito na sua camada de apresentação / visão.