Duvida sobre DAO com JPA

2 respostas
T

E ai pessoal,

É noob a dúvida mas fazer o que né…

Eu estou criando uma aplicação utilizando agora a tecnologia de ORM JPA mas eu estava acostumado a desenvolver em DAO+JDBC…

Bom é necessário também termos um dao utilizando JPA?? Alguém tem um exemplo de um DAO generico utilizando JPA para mim tirar uma idéia???

Vlw!

2 Respostas

L
package persistencia;

import java.util.List;
import org.hibernate.*;
import org.hibernate.cfg.AnnotationConfiguration;

public class DAO {
    
    private SessionFactory sfSessao;
    
    public DAO() {
        try {
            if (sfSessao == null) {
                sfSessao = new AnnotationConfiguration().configure().buildSessionFactory();
            }
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public boolean inserir(Object objeto) {
        
        Session     sessao  = sfSessao.openSession();
        Transaction trx     = sessao.beginTransaction();
        boolean     flag    = false;
        
        try {
            sessao.save(objeto);
            sessao.flush();
            trx.commit();
            flag = true;
        } catch(Exception ex) {
            ex.printStackTrace();
            trx.rollback();
            flag = false;
        } finally {
            sessao.close();
            return flag;
        }
    }
    
    public boolean alterar(Object objeto) {
        
        Session     sessao  = sfSessao.openSession();
        Transaction trx     = sessao.beginTransaction();
        boolean     flag    = false;
        
        try {
            sessao.saveOrUpdate(objeto);
            sessao.flush();
            trx.commit();
            flag = true;
        } catch(Exception ex) {
            ex.printStackTrace();
            trx.rollback();
            flag = false;
        } finally {
            sessao.close();
            return flag;
        }
    }
    
    public boolean excluir(Object objeto) {
        
        Session     sessao  = sfSessao.openSession();
        Transaction trx     = sessao.beginTransaction();
        boolean     flag    = false;
        
        try {
            sessao.delete(objeto);
            sessao.flush();
            trx.commit();
            flag = true;
        } catch(Exception ex) {
            ex.printStackTrace();
            trx.rollback();
            flag = false;
        } finally {
            sessao.close();
            return flag;
        }
    }
    
    public List buscar(String sql) {
        
        Session     sessao  = sfSessao.openSession();
        Transaction trx     = sessao.beginTransaction();
        List        lista   = null;
        
        try {
            System.out.print(sql);
            Query qr = sessao.createQuery(sql);
            sessao.flush();
            trx.commit();
            lista = qr.list();
        } catch(Exception ex) {
            ex.printStackTrace();
            trx.rollback();
        } finally {
            sessao.close();
            return lista;
        }
    }
    
    public int getChavePrimaria(String tabela) {
        
        int id = 1;
        String resultado = null;
        String query = tabela + ".ChavePrimaria";
        Session session   = sfSessao.openSession();
        Transaction trx   = session.beginTransaction();
        Query   q         = session.getNamedQuery(query);
        Object o          = q.uniqueResult();
        
        if(o == null)
            resultado = "0";
        else
            resultado = o.toString();
        
        id += Integer.parseInt(resultado);
        
        trx.commit();
        
        return id;
    }
    
    public List buscarQuery(String nomeQuery) {
        
        Session session = sfSessao.openSession();
        Transaction trx = session.beginTransaction();
        Query q         = session.getNamedQuery(nomeQuery);
        List lista      = q.list();
        session.flush();
        trx.commit();
        session.close();
        return lista;
    }
    
    public Object buscarUnico(String nomeQuery, String parametrosQuery, String valoresParametros){
        Session session   = sfSessao.openSession();
        Transaction trx   = session.beginTransaction();
        Query   q         = session.getNamedQuery(nomeQuery);
        String parametros = parametrosQuery   + ";";
        String valores    = valoresParametros + ";";
        
        while(parametros.indexOf(";") > 0) {
            String p   = parametros.substring(0,parametros.indexOf(";"));
            String v   = valores.substring(0,valores.indexOf(";"));
            parametros = parametros.substring(parametros.indexOf(";") + 1);
            valores    = valores.substring(valores.indexOf(";") + 1);
            q.setString(p, v);
        }
        
        Object  resultado =  q.uniqueResult();
        trx.commit();
        return resultado;
    }
    
    public List buscarQuery(String nomeQuery, String parametrosQuery, String valoresParametros){
        Session session   = sfSessao.openSession();
        Transaction trx   = session.beginTransaction();
        Query   q         = session.getNamedQuery(nomeQuery);
        String parametros = parametrosQuery   + ";";
        String valores    = valoresParametros + ";";
        
        while(parametros.indexOf(";") > 0) {
            String p   = parametros.substring(0,parametros.indexOf(";"));
            String v   = valores.substring(0,valores.indexOf(";"));
            parametros = parametros.substring(parametros.indexOf(";") + 1);
            valores    = valores.substring(valores.indexOf(";") + 1);
            q.setString(p, v);
        }
        
        List lista = q.list();
        trx.commit();
        return lista;
    }
    
    public int getInt(String nomeQuery) {
        
        int inteiro = 0;
        String resultado = null;
        Session session   = sfSessao.openSession();
        Transaction trx   = session.beginTransaction();
        Query   q         = session.getNamedQuery(nomeQuery);
        Object o          = q.uniqueResult();
        
        if(o == null)
            resultado = "0";
        else
            resultado = o.toString();
        
        inteiro += Integer.parseInt(resultado);
        
        trx.commit();
        
        return inteiro;
    }
}

espero que ajude… vlw :smiley:

T

vlw, deu uma ideia legal sim!

agora um dúvida, estou vendo vários exemplos de implementação do JPA utilizando o hibernate!

mas eu estou utilizando a implementação padrão da API! Tem alguma vantagem em utilizar o hibernate??

Uma dúvida meu netbeans não mostra o javadoc das classes EntityManagerFactory e etc pq será??

Queria um help sobre alguns metodos da Classe mas não aparece no help…

Criado 24 de outubro de 2007
Ultima resposta 24 de out. de 2007
Respostas 2
Participantes 2