Erro no hibernate ao chamar update do JSF

1 resposta
M

Opa…quando eu chamo o update, eu recebo o seguinte erro:

meu update e inicialização da classe está assim:

public GeralDAO(Class<T> classe) {
		this.classe = classe;
		logger.info("Setando sessão atual");
		session = HibernateSessionFactory.getInstance().openSession();
		logger.info("Setando transaction atual");
		transaction = session.beginTransaction();
	}

public void update(Object object) {
		try 
		{
			logger.info("Preparando para atualizar objeto: [ " + classe.getSimpleName() + " ]");
			session.update(object);
			transaction.commit();
			logger.info("Objeto [ " + classe.getSimpleName() + " ] atualizado com sucesso");
		} catch (Exception ex) {
			logger.error("Erro ao atualizar objeto: [ " + classe.getSimpleName() + " ]", ex);
			rollback();
		} finally {
			try {
				if(session.isOpen()){
					logger.error("Finalizando sessao");
					//session.close();
				}
			} catch (HibernateException hex) {
				logger.error("Erro ao finalizar sessao", hex);
			}
		}
	}

e o meu HibernateSessionFactory, eu copiei do site roseindia.net

public class HibernateSessionFactory {

	/**
	 * Construtor padrão.
	 */
	private HibernateSessionFactory() {
	}

	/**
	 * Localização do arquivo de configuração hibernate.cfg.xml 
	 */
	private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

	/** 
	 * Instância única de configuração do hibernate 
	 */
	private static final Configuration cfg = new AnnotationConfiguration();

	/** 
	 * Instância única do hibernate SessionFactory 
	 */
	private static org.hibernate.SessionFactory sessionFactory;

	/**
	 * Inicializa a configuração caso ainda não tenha sido feita e retorna 
	 * a atual instância
	 * 
	 * @return Atual instância do SessionFactory
	 */
	public static SessionFactory getInstance() {
		if (sessionFactory == null)
			hibernateSessionFactory();
		return sessionFactory;
	}

	/**
	 * Retorna a instância atual de Session e caso precise,
	 * ela é inicializada
	 * 
	 * @return Session 
	 * @throws HibernateException
	 */
	public Session openSession() {
		return sessionFactory.getCurrentSession();
	}

	/**
	 * Obtém a session atual através do sessionFactory
	 * 
	 * @return Session
	 */
	public Session getCurrentSession() {
		return sessionFactory.getCurrentSession();
	}

	/**
	 * Inicializa a session factory de uma maneira segura.
	 */
	private static synchronized void hibernateSessionFactory() {

		Logger log = Logger.getLogger(HibernateSessionFactory.class);
		if (sessionFactory == null) {
 

			try {
				cfg.configure(CONFIG_FILE_LOCATION);
				String sessionFactoryJndiName = cfg.getProperty(Environment.SESSION_FACTORY_NAME);
				if (sessionFactoryJndiName != null) {
					cfg.buildSessionFactory();
					log.debug("get a jndi session factory");
					sessionFactory = (SessionFactory) (new InitialContext()).lookup(sessionFactoryJndiName);
				} else{
					log.debug("classic factory");
					sessionFactory = cfg.buildSessionFactory();
				}

			} catch (Exception e) {
				System.err.println("%%%% Error Creating HibernateSessionFactory %%%%");
				e.printStackTrace();
				throw new HibernateException("Could not initialize the Hibernate configuration");
			}
		}
	}
 
	/**
	 * Fecha a sessionFactory
	 */
	public static void close(){
		if (sessionFactory != null)
			sessionFactory.close();
		sessionFactory = null;
 
	}

E a chamada para o update, eu faço no meu backing bean

public String salvarCarga(){
		getEmpresaBean().getCargas().add(getCargaBean());
		EmpresaDAO dao = new EmpresaDAO(br.com.ms.bean.empresa.EmpresaBean.class);
		dao.update(getEmpresaBean());
		FacesContext.getCurrentInstance().addMessage("formulario", new FacesMessage("Carga Cadastrada Com Sucesso"));
		setDadosCarga(false);
		setTabelaCargas(true);
		return "tabelaCarga";
	}

Alguém sabe o que to fazendo de errado?

[]'s

1 Resposta

M

mendigosujo:
Opa…quando eu chamo o update, eu recebo o seguinte erro:

meu update e inicialização da classe está assim:

public GeralDAO(Class<T> classe) {
		this.classe = classe;
		logger.info("Setando sessão atual");
		session = HibernateSessionFactory.getInstance().openSession();
		logger.info("Setando transaction atual");
		transaction = session.beginTransaction();
	}

public void update(Object object) {
		try 
		{
			logger.info("Preparando para atualizar objeto: [ " + classe.getSimpleName() + " ]");
			session.update(object);
			transaction.commit();
			logger.info("Objeto [ " + classe.getSimpleName() + " ] atualizado com sucesso");
		} catch (Exception ex) {
			logger.error("Erro ao atualizar objeto: [ " + classe.getSimpleName() + " ]", ex);
			rollback();
		} finally {
			try {
				if(session.isOpen()){
					logger.error("Finalizando sessao");
					//session.close();
				}
			} catch (HibernateException hex) {
				logger.error("Erro ao finalizar sessao", hex);
			}
		}
	}

e o meu HibernateSessionFactory, eu copiei do site roseindia.net

public class HibernateSessionFactory {

	/**
	 * Construtor padrão.
	 */
	private HibernateSessionFactory() {
	}

	/**
	 * Localização do arquivo de configuração hibernate.cfg.xml 
	 */
	private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

	/** 
	 * Instância única de configuração do hibernate 
	 */
	private static final Configuration cfg = new AnnotationConfiguration();

	/** 
	 * Instância única do hibernate SessionFactory 
	 */
	private static org.hibernate.SessionFactory sessionFactory;

	/**
	 * Inicializa a configuração caso ainda não tenha sido feita e retorna 
	 * a atual instância
	 * 
	 * @return Atual instância do SessionFactory
	 */
	public static SessionFactory getInstance() {
		if (sessionFactory == null)
			hibernateSessionFactory();
		return sessionFactory;
	}

	/**
	 * Retorna a instância atual de Session e caso precise,
	 * ela é inicializada
	 * 
	 * @return Session 
	 * @throws HibernateException
	 */
	public Session openSession() {
		return sessionFactory.getCurrentSession();
	}

	/**
	 * Obtém a session atual através do sessionFactory
	 * 
	 * @return Session
	 */
	public Session getCurrentSession() {
		return sessionFactory.getCurrentSession();
	}

	/**
	 * Inicializa a session factory de uma maneira segura.
	 */
	private static synchronized void hibernateSessionFactory() {

		Logger log = Logger.getLogger(HibernateSessionFactory.class);
		if (sessionFactory == null) {
 

			try {
				cfg.configure(CONFIG_FILE_LOCATION);
				String sessionFactoryJndiName = cfg.getProperty(Environment.SESSION_FACTORY_NAME);
				if (sessionFactoryJndiName != null) {
					cfg.buildSessionFactory();
					log.debug("get a jndi session factory");
					sessionFactory = (SessionFactory) (new InitialContext()).lookup(sessionFactoryJndiName);
				} else{
					log.debug("classic factory");
					sessionFactory = cfg.buildSessionFactory();
				}

			} catch (Exception e) {
				System.err.println("%%%% Error Creating HibernateSessionFactory %%%%");
				e.printStackTrace();
				throw new HibernateException("Could not initialize the Hibernate configuration");
			}
		}
	}
 
	/**
	 * Fecha a sessionFactory
	 */
	public static void close(){
		if (sessionFactory != null)
			sessionFactory.close();
		sessionFactory = null;
 
	}

E a chamada para o update, eu faço no meu backing bean

public String salvarCarga(){
		getEmpresaBean().getCargas().add(getCargaBean());
		EmpresaDAO dao = new EmpresaDAO(br.com.ms.bean.empresa.EmpresaBean.class);
		dao.update(getEmpresaBean());
		FacesContext.getCurrentInstance().addMessage("formulario", new FacesMessage("Carga Cadastrada Com Sucesso"));
		setDadosCarga(false);
		setTabelaCargas(true);
		return "tabelaCarga";
	}

Alguém sabe o que to fazendo de errado?

[]'s

Criado 9 de junho de 2008
Ultima resposta 9 de jun. de 2008
Respostas 1
Participantes 1