vamos la então
quando eu peguei o genericDAO ta assim , uma verdadeira zona:
[code]
package org.smartgestor.dao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.smartgestor.util.EntityManagerUtil;
/**
*
-
@author Gilton Nascimento
-
@version 1.2
*/
public class GenericDao {
protected Session ses;
private boolean sessionClosed = false;
protected EntityManager em;
private EntityManagerUtil emu;
public GenericDao() {
}
protected Session getSession() {
return emu.getSession();
}
protected EntityManager getEntity() {
return EntityManagerUtil.getEntityManager();
}
/* Save and Update */
protected void savePojo(Object obj) {
em = getEntity();
try {
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
}
finally
{
em.close();
}
//safeCommitONClose();
}
/* Update */
protected void updatePojo(Object obj) {
em = getEntity();
try {
em.getTransaction().begin();
em.flush();
em.merge(obj);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
}
finally
{
em.close();
}
/*ses.flush();
ses.update(obj);
safeCommitONClose();*/
}
/* Update */
protected <T extends Serializable> void updateEntityPojo(T obj) {
getEntity().flush();
getEntity().merge(obj);
safeCommitONClose();
}
/**
* @author Gilton
* @since 19/11/2012-09:43:38
* @param obj
* void
*/
protected void removerPojo(Object obj) {
em = getEntity();
try {
em.getTransaction().begin();
em.remove(obj);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
}
finally
{
em.close();
}
/*ses.delete(obj);
safeCommitONClose();*/
}
/**
* @author José Aureliano de Oliveira Junior
* @since 31/01/2013-12:29:38
* @param obj
* void
*/
protected void removerPojoDetached(Object obj)
{
em = getEntity();
try {
em.getTransaction().begin();
obj = em.merge(obj);
em.remove(obj);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
}
finally
{
em.close();
}
/*ses.beginTransaction();
obj = ses.merge(obj);
ses.delete(obj);
safeCommitONClose();*/
}
/**
* @author Gilton Nascimento
* @since 27/12/2012-17:59:27
* @param classe Class<T>
* @param id long
* void
*/
protected<T extends Serializable> void removerPojo(Class<T> classe, long id) {
if( id != 0 && classe != null ) {
getEntity().remove( getEntity().find(classe, id) );
safeCommitONClose();
}
}
protected <T extends Serializable> void removerPojoReferenced(Class<T> cls, Object obj) {
getEntity().remove( getEntity().getReference(cls, obj) );
safeCommitONClose();
}
/**
* @author Gilton Nascimento
* @since 19/11/2012-10:49:47
* @param <T>
* @param obj
* @param nomeSQLCampoID
* @param id
* void
*/
protected <T extends Serializable> void removerPojo(Class<T> obj, String nomeSQLCampoID, long id) {
Object objeto = ses.createCriteria(obj).add(Restrictions.eq(nomeSQLCampoID,id)).uniqueResult();
ses.delete(objeto);
safeCommitONClose();
}
/**
* @author Gilton Nascimento
* @since 19/11/2012-10:49:57
* @param <T>
* @param obj
* @param sql
* @param id
* void
*/
protected <T extends Serializable> void removerPojoByQry(Class<T> obj, String sql, long id) {
if ( isSessionClosed() ) ses = getSession();
ses.createQuery(sql).setParameter("codigo", id).executeUpdate();
safeCommitONClose();
}
/**
* @author Gilton Nascimento
* @since 19/11/2012-10:50:47
* @param <T>
* @param obj
* @param sql void
*/
protected <T extends Object> void removerPojo(T obj, String sql) {
ses.createQuery(sql).executeUpdate();
safeCommitONClose();
}
// Consultas
@SuppressWarnings(“unchecked”)
protected T getPojoByID(Class classe, Serializable key) {
Serializable obj = (Serializable) ses.get(classe, key);
if( !isSessionClosed() ) sessionClosed();
return (T) obj;
}
@SuppressWarnings("unchecked")
protected <T extends Serializable> T getPojoByID( Class<T> classe, String fieldID, long id ) {
T obj = (T) ses.createCriteria(classe).add(Restrictions.eq(fieldID, id)).uniqueResult();
if( !isSessionClosed() ) sessionClosed();
return obj;
}
@SuppressWarnings("unchecked")
protected <T extends Serializable> T getPojoByQry(String query, Object... params) {
org.hibernate.Query qry = ses.createQuery(query);
for (int i = 0; i < params.length; i++) {
qry.setParameter(i, params[i]);
}
Object obj = qry;
sessionClosed();
return (T) obj;
}
@SuppressWarnings("unchecked")
protected <T extends Serializable> T getPojoByFilterSTR(Class<T> classe, String fieldName, String filter) {
T obj = (T) ses.createCriteria(classe).add(Restrictions.eq(fieldName, filter)).uniqueResult();
sessionClosed();
return (T) obj;
}
// @SuppressWarnings(“unchecked”)
// protected T getPojoByQNamed(String qNamed, Object objFiltro) {
// String strParam = qNamed.substring(qNamed.indexOf(“By”) + 2).toLowerCase();
// Query query = ses.getNamedQuery(qNamed).setParameter(strParam, objFiltro);
// Object obj = query.uniqueResult();
//
// if( isSessionClosed() ) sessionClosed();
//
// return (T) obj;
// }
//
@SuppressWarnings("unchecked")
protected <T extends Object> List<T> getALLCriteria(Class<T> cls) { /// esse aqui é o que estou usando e que eu alterei
EntityManager em = getEntity();
try {
List<T> lista = getEntity().createQuery("select o from "+cls.getSimpleName()+" o").getResultList();
return lista;
} catch (Exception e) {
System.out.println("Erro = "+e.getMessage());
return null;
}
finally
{
try
{
em.close();
System.out.println("Executou o em.close()");
}catch(Exception ex)
{
ex.printStackTrace();
}
}
/*
List<T> itens = ses.createCriteria(cls).list();
sessionClosed();
return itens;
*/
}
/**
* Fecha a sessão caso seja true e recupera todas as ocorrências daquela tabela
* @param <T>
* @param classe Class<T>
* @param sessionClosed boolean
* @return List<T>
*/
@SuppressWarnings("unchecked")
protected <T extends Object> List<T> getALL(Class<T> classe) {
Criteria query = ses.createCriteria("SELECT c FROM " + classe.getSimpleName() + " c");
List<T> itens = query.list();
if( !isSessionClosed() ) sessionClosed();
return itens;
}
/**
*
* Usada caso o nome das entidade nao estejam compativeis com as do banco de dados.
* @author Gilton Nascimento
* @since 30/11/2012-15:41:07
* @param <T>
* @param classe
* @param toLowerPalavra
* @return List<T>
*/
@SuppressWarnings("unchecked")
protected <T extends Object> List<T> getALL(Class<T> classe, String toLowerPalavra) {
String realNameEntity = "";
if( toLowerPalavra.equals("1") )
realNameEntity = classe.getSimpleName().substring(0,1).toLowerCase().concat( classe.getSimpleName().substring(1) );
Criteria query = ses.createCriteria("SELECT * FROM " + realNameEntity + " ");
List<T> itens = query.list();
if( !isSessionClosed() ) sessionClosed();
return itens;
}
/**
* @author Gilton Nascimento
* @since 30/11/2012-12:52:42
* @param <T>
* @param cls
* @param filter
* @return List<T>
*/
@SuppressWarnings("unchecked")
protected <T extends Object> List<T> getALLByFilter( Class<T> cls, String filter ) {
return (List<T>) ses.createCriteria(cls).add(Restrictions.eq("situacao", filter)).list();
}
@SuppressWarnings("unchecked")
protected <T extends Object> List<T> getALLByFilter( Class<T> cls, String filter, Date dt ) {
return (List<T>) ses.createCriteria(cls).add(Restrictions.eq("situacao", filter)).
add(Restrictions.eq("dataVencimento", dt)).list();
}
//
// Ate o momento, eh considerado desnecessario.
// @SuppressWarnings(“unchecked”)
// protected List getListByQNamed(String qryNamed, Object objFiltro) {
// String strParam = qryNamed.substring(qryNamed.indexOf(“By”) + 2).toLowerCase();
//
// Query query = ses.getNamedQuery(qryNamed).setParameter(strParam, objFiltro);
// List itens = query.list();
// sessionClosed();
// return itens;
// }
// @SuppressWarnings(“unchecked”)
// protected List getListByQNamedPRX(String qryNamed, Object objFiltro) {
// String strParam = qryNamed.substring(qryNamed.indexOf(“By”) + 2).toLowerCase();
// Query query = ses.getNamedQuery(qryNamed).setParameter(strParam, “%” + objFiltro + “%”);
// List itens = query.list();
// sessionClosed();
// return itens;
// }
@SuppressWarnings("unchecked")
protected <T extends Serializable> List<T> getListByFilter(Class<T> cls, String toLower, String filter, Object...params) {
Query qry = ses.createFilter(getALL(cls), filter);
for(int i = 0; i <params.length; i++)
qry.setParameter(i, params[i]);
List<T> itens = qry.list();
return itens;
}
@SuppressWarnings("unchecked")
protected <T extends Serializable> List<T> getListByQry(String query, Object... params) {
Query qry = ses.createQuery(query);
for (int i = 0; i < params.length; i++)
qry.setParameter(i, params[i]);
List<T> itens = qry.list();
sessionClosed();
return itens;
}
// Commits
private void safeCommitONClose() {
try {
if( !ses.getTransaction().isActive() ) ses.getTransaction().begin();
ses.getTransaction().commit();
} catch (HibernateException e) {
System.err.println("HibernateException!!\n" + "Error no SafeCommit: " + e.getMessage());
ses.getTransaction().rollback();
} catch (Exception e) {
System.err.println("Error no SafeCommit: " + e.getMessage());
ses.getTransaction().rollback();
} finally { sessionClosed(); }
}
// CloseSession
public void sessionClosed() {
ses.flush();
ses.clear();
ses.close();
}
/**
* @return the sessionClosed
*/
public boolean isSessionClosed() { return sessionClosed; }
/**
* @param sessionClosed the sessionClosed to set
*/
public void setSessionClosed(boolean sessionClosed) { this.sessionClosed = sessionClosed; }
protected <T extends Serializable> T findPojo(Class<T>cls, Long id) {
T t = getEntity().find(cls, id);
sessionClosed();
return t;
}
}[/code]
no demais DAOs está assim
[code]
package org.smartgestor.dao;
import java.util.List;
import org.smartgestor.negocio.Almoxarifado;
public class AlmoxarifadoDAO extends GenericDao {
public void salvarAlmoxarifado(Almoxarifado almoxarif) { savePojo(almoxarif); }
public void alterarAlmoxarifado(Almoxarifado almoxarif) { updatePojo(almoxarif); }
public void removerAlmoxarifado(Almoxarifado almoxarif) { removerPojo(almoxarif); }
public void removerAlmoxarifado(long id) { removerPojo(Almoxarifado.class, "idAlmoxarifado" ,id); }
public List<Almoxarifado> getALLAlmoxarifados() { return getALLCriteria(Almoxarifado.class); }
public Almoxarifado getAlmoxarifadoByID(long id){ return getPojoByID(Almoxarifado.class, "idAlmoxarifado", id); }
}[/code]
ai no managedbean, esta assim o @postConstruct
@PostConstruct
private void init() {
setProduto(new Produto());
setSelected(new Produto());
setUnidadeMedida(new UnidadeMedida());
setUnidadeCompra(new Unidade());
setUnidadeVenda(new Unidade());
setAlmoxarifado(new Almoxarifado());
setTipoItem(new TipoItem());
setOrigem(new Origem());
setCstICMS(new CstICMS());
setCstIPI(new CstIPI());
setCsosn(new Csosn());
setPiscofins(new CstPisCofins());
setFlagPV(false);
setGrupo( new Grupo() );
setSubGrupo( new SubGrupo() );
setDesabilitarSubGrupo(true);
setProdutos( getListProdutos() ); //abre uma conexão e faz um select
setGrupos( getListGrupos() ); //abre uma conexão e faz um select
setSubgrupos( getListSubGrupos() );//abre uma conexão e faz um select
setUnidadesCompra( getListUnidades() );//abre uma conexão e faz um select
setUnidadesVenda( getListUnidades() );//abre uma conexão e faz um select
setUnidadesDeMedidas( new ArrayList<UnidadeMedida>() );
setAlmoxarifados(getListAlmoxarifados());//abre uma conexão e faz um select
setTiposItens( getListTiposItens() );//abre uma conexão e faz um select
setOrigens( getListOrigens() );//abre uma conexão e faz um select
setListCstICMS( getListCSTs() );//abre uma conexão e faz um select
setListCstIPI( getListCSTIPIs() );//abre uma conexão e faz um select
setListCsosn(getListCSOSNs());//abre uma conexão e faz um select
setListPisCofins(getListPISCOFINs());//abre uma conexão e faz um select
setValoresDePrecos( getListPrecosDeVendas() );//abre uma conexão e faz um select
setTabelasDePreco(new ArrayList<PrecoDeVenda>());
getAllPrecosTabela();
setSelectedPV(new PrecoDeVenda());
setPmodel(new ProdutosModel( getProdutos() ));
setTabelasDePrecoPrd(new ArrayList<TabelaPrecosModel>());
setGradeDoProduto(new ArrayList<GradeProduto>());
setItemGrade(new GradeProduto());
setComposicao(new Composicao());
}
e ele não fecha as conexões por nada nesse universo