Olá,
no exemplo abaixo estou gravando no banco de dados e como estou usando pool de conexão
nesse caso abaixo preciso fechar a session que foi passada para devolver ou
automaticamente é devolvido após o uso.
Porque no xml eu defini 5 ao usar ele devolve ou tenho que usar finally declarando um close.
Se alguém puder me ajudar agradeceria.
abs
public static void main(String[] args) {
//Pegar Session Hibernate
Session session = HibernateUtil.openSession();
tx = session.beginTransaction();
try{
NivelFacade NivelFacade = new NivelFacade(session);
FilialFacade FilialFacade = new FilialFacade(session);
UsuarioFacade UsuarioFacade = new UsuarioFacade(session);
//Instancia o objeto Usuario
Usuario p = new Usuario();
//Ler o nivel
Nivel nivel = NivelFacade.find(Nivel.class, 01L);
p.setNivel(nivel);
//Ler a filial
Filial filial = FilialFacade.find(Filial.class, 900L);
p.setFilial(filial);
// Popula o Objeto Usuario
p.setLogin("pwd999");
p.setSenha("senha nova9");
p.setDtInicial(new Date());
p.setDtFim(new Date());
p.setNomeUsuario("Usuario999");
Long nrcpf = Long.valueOf("[telefone removido]");
p.setCpf(nrcpf);
// Grava o objeto Usuario
UsuarioFacade.persist(p);
tx.commit();
System.out.println("Id = "+p.getId());
}catch(DAOException d){
tx.rollback();
System.out.println("Erro ="+d);
}catch(Exception e){
tx.rollback();
System.out.println("Erro ="+e);
}
}}
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static final Logger logger = Logger.getLogger(HibernateUtil.class);
private static final SessionFactory sessionFactory;
private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();
static {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
public static Session openSession() {
if (sessions.get() != null) {
logger.error("Essa sessão está ainda aberta !! ");
// grave, alguem nao fechou uma sessao ja aberta!
}
sessions.set(sessionFactory.openSession());
return sessions.get();
}
lic static void closeCurrentSession() {
sessions.get().close();
sessions.set(null);
}
lic static Session currentSession() {
return sessions.get();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@129.1.30.123:1521:XXXXXX</property>
<property name="hibernate.connection.username">des</property>
<property name="hibernate.connection.password">des</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">180</property>
<property name="hibernate.c3p0.idle_test_period">100</property>
<mapping class="br.com.xxx.bean.Usuario"/>
<mapping class="br.com.xxx.bean.Filial"/>
<mapping class="br.com.xxx.bean.Nivel"/>
</session-factory>