DAO e HibernateUltil

3 respostas
matheusssilva

To com um erro aqui que não estou consseguindo identificar.

Estou usando hibernate para persistir os dados de uma aplicação. Tenho duas classes uma é o meu objeto DAO que é responssavel por dar os comandos de gravação, exclusão e atualização e aoutra é a minha classe HibernateUltil que é responssavel por criar e abrir novas sessões com a classe SessionFactory.

A minha classe DAO chama a classe HibernateUltil para que ela lhe entrege um objeto da classe SessionFactory. É justamente nessa chamada que está o meu erro.

Minha classe DAO

package br.com.tubalan.extra;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Matheus
 */
public class Dao<Dao> implements Daointerface{

    private final Session sessao;
    Transaction tz = null;
    private Dao dao;

    public Dao(Dao dao){

        this.sessao = HibernateUltil(dao.getClass()).getSessao();
        this.dao = dao;
    }

    public void Grava() {
        try{
            tz = sessao.beginTransaction();
            sessao.saveOrUpdate(dao);
            tz.commit();
        }
        catch(Exception erro){
            System.out.println("Erro ao gravar dados "+erro);
        }
    }

    public void Exclui() {
        try{
            tz = sessao.beginTransaction();
            sessao.delete(dao);
            tz.commit();
        }
        catch(Exception erro){
            System.out.println("Erro ao excluir dados "+erro);
            tz.rollback();
        }
    }

    public List Consulta() {

        List lista = sessao.createCriteria(dao.getClass()).list();
        return lista;
    }

    public List ConsultaOrdenada(String coluna, boolean ordem) {
        List lista;
        
        if(ordem){
            lista = sessao.createCriteria(dao.getClass()).addOrder(Order.asc(coluna)).list();
        } else {
            lista = sessao.createCriteria(dao.getClass()).addOrder(Order.desc(coluna)).list();
        }

        return lista;
    }

    public List ConsultaPerssonalizada(String coluna, int inicio, int fim) {

        List lista = sessao.createCriteria(dao.getClass()).
                add(Restrictions.between(coluna, inicio, fim)).list();
        return lista;

    }

    public List ConsultaPerssonalizada(String coluna, String[] quecontenha) {

        List lista = sessao.createCriteria(dao.getClass()).
                add(Restrictions.in(coluna, quecontenha)).list();
        return lista;

    }

    public List ConsultaPerssonalizada(String coluna, String filtro) {

        List lista = sessao.createCriteria(dao.getClass()).
                add(Restrictions.like(coluna, filtro)).list();
        return lista;
    }

    public List ConsultaExample() {

        List lista = sessao.createCriteria(dao.getClass()).add(Example.create(dao)).list();
        return lista;
    }

}

minha classe HibernateUltil

package br.com.tubalan.extra;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 *
 * @author Matheus
 */

public class HibernateUltil {

    private static SessionFactory sessao;
    private static Class classe;

    public HibernateUltil(Class classe){

        HibernateUltil.classe = classe;
    }
    static{
        sessao = new AnnotationConfiguration().addAnnotatedClass(classe).buildSessionFactory();
    }

    public static Session getSessao(){
        return sessao.openSession();
    }
}

abaixo segue o erro gerado pelo netbeans

init:
deps-clean:
Updating property file: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build\built-clean.properties
Deleting directory C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build
clean:
init:
deps-jar:
Created dir: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build
Updating property file: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build\built-jar.properties
Created dir: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build\classes
Created dir: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build\empty
Compiling 30 source files to C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\build\classes
C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\src\br\com\tubalan\extra\Dao.java:27: cannot find symbol
symbol  : method HibernateUltil(java.lang.Class<capture#870 of ? extends java.lang.Object>)
location: class br.com.tubalan.extra.Dao<Dao>
        this.sessao = HibernateUltil(dao.getClass()).getSessao();
Note: C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\src\br\com\tubalan\teste\testeGravacao.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\nbproject\build-impl.xml:413: The following error occurred while executing this line:
C:\Users\Matheus\Documents\NetBeansProjects\Tubalan\nbproject\build-impl.xml:199: Compile failed; see the compiler error output for details.
FALHA NA CONSTRUÇÃO (tempo total: 1 segundo)

3 Respostas

bosnic

Mas por que método com letra maiúscula?

bosnic

ah tá, o erro é porque faltou new na frente de this.sessao = HibernateUltil(dao.getClass()).getSessao()

matheusssilva

Não sei qual era o problema mas sei que resolvi.

Percebi que o netbean ficava dando uns alertas sobre objeto static

então resolvi mudar o hibernateultil para não trabalhar mais de forma static.

ficou assim

package br.com.tubalan.extra;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 *
 * @author Matheus
 */

public class hibernateultil {

    private static SessionFactory sessao;
    private Class classe;

    public hibernateultil(Class classe){

        this.classe = classe;
    }

    public Session getSessao(){

        sessao = new AnnotationConfiguration().addAnnotatedClass(classe).buildSessionFactory();
        return sessao.openSession();
    }
}

a chamado a ele ficou assim.

public class Dao<OAD> implements Daointerface{

    private final Session sessao;
    Transaction tz = null;
    private OAD dao;

    public Dao(OAD dao){

        this.dao = dao;
        this.sessao = new hibernateultil(this.dao.getClass()).getSessao();

    }
}

valeu brother.

Criado 6 de maio de 2010
Ultima resposta 7 de mai. de 2010
Respostas 3
Participantes 2