Hibernate teste

7 respostas
I

Bom galera, sou iniciante. A situação é que peguei um caso de uso do Hibernate e coloquei no netbeans 6.1. com isso apresentou o seguinte erro quando pesso pra compilar a class com o metodo main:

init:
deps-jar:
Compiling 1 source file to C:\NetBeansProjects\itamEsto\build\classes
Note: C:\NetBeansProjects\itamEsto\src\hiber\AplicacaoTexto.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
compile-single:
BUILD SUCCESSFUL (total time: 0 seconds)

Acredito que seja algum problema com uso de Strings.

Se tento executar a mesma classe, mesmo não compilando, dar o seguinte erro:

eps-jar:

compile-single:

run-single:

Exception in thread main java.lang.NullPointerException

at hiber.FuncionarioHibernateDAO.gravar(FuncionarioHibernateDAO.java:49)

at hiber.AplicacaoTexto.main(AplicacaoTexto.java:38)

Java Result: 1

BUILD SUCCESSFUL (total time: 0 seconds)

minha classe DAO é a seguinte:

import java.util.List;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.*;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.Criteria;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;

/**
 *
 * @author administrador
 */
public class FuncionarioHibernateDAO implements FuncionarioDAO {
    private HibernateConfiguracao hibernateConfiguracao;
    
    public FuncionarioHibernateDAO(){
        super();
        hibernateConfiguracao = new HibernateConfiguracao();
         }
    public Funcionario carregaUm(String nome) throws HibernateException {
        Session session = hibernateConfiguracao.openSession();
        Transaction transaction = session.beginTransaction();
        Criteria criteria = session.createCriteria(Funcionario.class);
        criteria.add(Expression.eq("nome", nome));
        Funcionario funcionario = (Funcionario)criteria.uniqueResult();
        transaction.commit();
        session.close();
        return funcionario;
    }
    public List carregarTudoOrdenadoNome()throws HibernateException{
        Session session = hibernateConfiguracao.openSession();
        Criteria criteria = session.createCriteria(Funcionario.class);
        criteria.addOrder(Order.asc("nome"));
        return criteria.list();
    }
    public void gravar(Funcionario funcionario) throws HibernateException{
        Session session = hibernateConfiguracao.openSession();
        Transaction transaction=session.beginTransaction();
        session.update(funcionario);
        transaction.commit();
        session.close();
    }
    public void excluir(Funcionario funcionario) throws HibernateException{
        Session session = hibernateConfiguracao.openSession();
        Transaction transaction = session.beginTransaction();
        session.delete(funcionario);
        transaction.commit();
        session.close();
    }

    public Funcionario carregarUm(String nome) throws HibernateException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

Minha classe Aplicação teste é:

import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.HibernateException;

/**
 *
 * @author administrador
 */
public class AplicacaoTexto {
    public AplicacaoTexto(){
        
    }
    public static void main(String[] args){
        //Uma instancia de factory que será a nossa fabrica de classes
        DAOFactory factory = FactoryClasses.criarDAOFactory(FactoryClasses.POSTGRESQL);
        //Uma instancia do DAO que contem os metodos responsaveis pela
        //gravaçao, leitura e exclusao dos dados persistentes
        FuncionarioHibernateDAO funcionarioHibernateDAO = new FuncionarioHibernateDAO();
        //Funcionario que será persistido
        Funcionario funcionario = new Funcionario();
        //Funcionario que será excluido
        Funcionario func = new Funcionario();
        //Instanciar um novo funcionario e persistir no banco
            funcionario.setId(101);
            funcionario.setNome("Joana");
            funcionario.setCargo("Tecnico Informatica");
            funcionario.setSalario(432.21);
            funcionario.setHorasExtras(0);
            //Instanciar um novo funcionario e persistir no banco
        try{
            funcionarioHibernateDAO.gravar(funcionario);
        }catch(HibernateException e){
            System.out.println("Não foi persistido.");
            e.printStackTrace();
        }
            //Listar todos os funcionarios
        try{
            List<Funcionario> listFuncionario;
            listFuncionario = funcionarioHibernateDAO.carregarTudoOrdenadoNome();
            
            System.out.println("Todos os funcionarios ordenados por nome");
                for (Funcionario funcList: listFuncionario){
                    System.out.println("--------------------------------");
                    System.out.println("Id.................: " +funcList.getId());
                    System.out.println("Nome...............: " +funcList.getNome());
                    System.out.println("Cargo..............: " +funcList.getCargo());
                    System.out.println("Salário............: " +funcList.getSalario());
                    System.out.println("Hora Extra.........: " +funcList.getHorasExtras());
                }
        } catch(HibernateException e){
            System.out.println("Não foi possivel recuperar todos os funcionarios.");
            e.printStackTrace();   
    }
            //Carregar apenas um dado de um funcionario
     try{
            String nome = JOptionPane.showInputDialog(null, "informe o nome");
            func = funcionarioHibernateDAO.carregaUm(nome);
                if (func != null){
                    System.out.println("Funcionario encontrado!");
                    System.out.println("--------------------------------");
                    System.out.println("Id.................: " +func.getId());
                    System.out.println("Nome...............: " +func.getNome());
                    System.out.println("Cargo..............: " +func.getCargo());
                    System.out.println("Salário............: " +func.getSalario());
                    System.out.println("Hora Extra.........: " +func.getHorasExtras());
                }else{
                System.out.println("Funcionario não encontrado!");
                }
        } catch(HibernateException e){
            System.out.println("Não foi possivel recuperar os dados de apenas um funcionarios.");
            e.printStackTrace();   
    }
       //Excluir o funcionario recuperado anteriormente
   try{
            
            funcionarioHibernateDAO.excluir(func);
       } catch(HibernateException e){
            System.out.println("Não foi possivel recuperar os dados de apenas um funcionarios.");
            e.printStackTrace();            
        }
    }
}

Agradeço desde já a ajuda.
Abraços

7 Respostas

marciobarroso

Carinha. Isso tá com cara de problema no seu HibernateConfiguracao.
Se você estiver conseguindo fazer outras transações no banco, pode descartar o que eu te falei.
Só toma cuidado com os exemplos que você pega na net, pois tem mta coisa antiga, e que na implementação de hoje, pode dar algum resultado diferente do esperado.

Por exemplo, se esta sua classe HibernateConfiguracao estiver implementando algum pool de sessões, pode ser este o problema, pois na implementação atual, o hibernate já faz isso por sí próprio.

Tenta mudar o código de hibernateConfiguracao.openSession() para getSession().

[]'s

I

Muito obrigado pela resposta, fiz as auterações que vc indicou, porém não houve auteraçao no erro. Então estou enviando a Class HibernateConfiguraçao. E outra informação, eu ainda nao conseguir nenhum acesso ao banco pelo hibernate.

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

/**
 *
 * @author administrador
 */
public class HibernateConfiguracao {
    private static SessionFactory sessionFactory;
    
    public HibernateConfiguracao(){
        super();
    }
    public Session openSession(){
        if (sessionFactory != null){
            return sessionFactory.openSession();
        }else {
            return null;
        }
    }
    public void criaSessionFactory(String arquivoHibernate){
        if (sessionFactory != null){
            Configuration configuration = new Configuration();
            configuration.configure(arquivoHibernate);
            sessionFactory = configuration.buildSessionFactory();
        }
    }
}
marciobarroso

Posta seu hibernate.cfg.xml também.

Olhando posso te dizer que seu problema esta na HibernateConfiguração.

Posta o cfg que eu te ajudo a acertar.

[]'s

I

Brigadão pela ajuda aí vai a o xml.

<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : hibernate.cfg.xml
    Created on : 8 de Abril de 2008, 17:01
    Author     : administrador
    Description:
        Purpose of the document follows.
-->

<!DOCTYPE arg PUBLIC '-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN' 'null'>
<hibernate-configuration>
    <session-factory name="testesimples">
        <property name="hibernate.connection.driver_class">
            org.postgresql.Driver
        </property>
        <property name="hibernate.connection.password">
            POSTGRES
        </property>
        <property name="hibernate.connection.url">
            jdbc:postgresql:localhost:5432/estoque
        </property>
        <property name="hibernate.connection.username">
            postgres
        </property>
        <property name="hibernate.dialect">
            org.hibernate.dialect.PostgreSQLDialect
        </property>
      <mapping resource="Funcionario.hbm.xml" />
    </session-factory>
</hibernate-configuration>
marciobarroso

Substitua seu hibernate.cfg.xml por este.

&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

&lt;hibernate-configuration&gt;
	&lt;session-factory&gt;
		&lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.PostgreSQLDialect&lt;/property&gt;
		&lt;property name="hibernate.connection.url"&gt;jdbc:postgresql://localhost:5432/estoque?charSet=LATIN1&lt;/property&gt;
		&lt;property name="hibernate.connection.driver_class"&gt;org.postgresql.Driver&lt;/property&gt;
		&lt;property name="hibernate.connection.username"&gt;postgres&lt;/property&gt;
		&lt;property name="hibernate.connection.password"&gt;&lt;/property&gt;

		&lt;property name="hibernate.hbm2ddl.auto"&gt;update&lt;/property&gt;
		&lt;property name="hibernate.cache.provider_class"&gt;org.hibernate.cache.HashtableCacheProvider&lt;/property&gt;
		&lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;
		&lt;property name="hibernate.generate_statistics"&gt;true&lt;/property&gt;
		&lt;property name="hibernate.use_sql_comments"&gt;true&lt;/property&gt;
		&lt;property name="hibernate.format_sql"&gt;true&lt;/property&gt;
		
		&lt;mapping resource="Funcionario.hbm.xml" /&gt; 
	&lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;

Altere sua classe HibernateConfiguracao como abaixo :

Usar o método getSession() para recuperar a sessão para iniciar os daos.

/**
 * jsf-richfaces-ajax4jsf
 * 08/04/2008 / GIF HIGH TECH / Marcio Alves Barroso ([email removido])
 */
package br.com.marcio.util;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;

/**
 * Class : HibernateUtil.java<br />
 * Version : 0.1<br />
 * User : Márcio Alves Barroso<br />
 * Date : 08/04/2008<br />
 * Time : 11:39:33<br />
 * Description : TODO
 */
public class HibernateUtil {

	private static Logger logger;
	
	private static final SessionFactory sessionFactory;
	private static final AnnotationConfiguration configuration;
	static {
		try {
			logger = Logger.getLogger(HibernateUtil.class);
			logger.debug("Iniciando a session factory do hibernate");
			configuration = new AnnotationConfiguration();
			configuration.configure();
			sessionFactory = configuration.buildSessionFactory();
		} catch (Throwable ex) {
			logger.fatal(ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public static Session getSession() {
		logger.debug("Recuperando a sessão");
		return sessionFactory.openSession();
	}
}

Testa ai e me fale o que aconteceu.

[]'s

I

Continuou o mesmo erro. e sem compilar…

marciobarroso

Cara… Deve ter alguma coisa errada com sua aplicação.

Se você puder, compacte e me envie que eu dou uma olhada para você.

[]'s

Criado 9 de abril de 2008
Ultima resposta 10 de abr. de 2008
Respostas 7
Participantes 2