[resolvido] problemas com hibernate + salto-db

4 respostas
M

Quando vou utilizar o metodo save(), ele retornar este erro, estou utilizando o salto-db para criar a estrutura hibernate. Alguém pode me ajudar.

package br.com.ufpi.agenda.hibernate;

import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.util.List;

import java.util.Map;
import org.hibernate.Criteria;

import org.hibernate.FlushMode;

import org.hibernate.Query;

import org.hibernate.LockMode;

import org.hibernate.Session;

import org.hibernate.criterion.Restrictions;

import org.hibernate.criterion.Criterion;

import org.hibernate.criterion.Example;

import br.com.ufpi.agenda.dao.GenericDAO;

/**

  • Generated at Mon Jul 21 21:37:46 GMT-03:00 2008

  • @author Salto-db Generator v1.0.16 / EJB3 + Hibernate DAO

  • @see http://www.hibernate.org/328.html
    */
    public abstract class AbstractHibernateDAO<T, ID extends Serializable> implements GenericDAO<T, ID> {

    private Session session;

    private Class persistentClass;

    public AbstractHibernateDAO() {
    
    this.persistentClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    
    }
    
    public void setSession(Session session) {
    
    this.session = session;
    
    }
    
    protected Session getSession() {
    
    if (session == null)
    
    session = HibernateUtil.getSessionFactory().getCurrentSession();
    
    return session;
    
    }
    
    public Class getPersistentClass() {
    
    return persistentClass;
    
    }
    
    @SuppressWarnings(unchecked)
    
    public T getById(ID id) {
    
    return (T) getSession().get(getPersistentClass(), id);
    
    }
    
    @SuppressWarnings(unchecked)
    
    public T getById(ID id, boolean lock) {
    
    if (lock) {
    
    return (T) getSession().get(getPersistentClass(), id,
    
    LockMode.UPGRADE);
    
    } else
    
    return getById(id);
    
    }
    
    @SuppressWarnings(unchecked)
    
    public T loadById(ID id) {
    
    return (T) getSession().load(getPersistentClass(), id);
    
    }
    
    public void save(T entity) {
    
    getSession().save(entity);
    
    }
    
    public void update(T entity) {
    
    getSession().update(entity);
    
    }
    
    public void saveOrUpdate(T entity) {
    
    getSession().saveOrUpdate(entity);
    
    }
    
    public void delete(T entity) {
    
    getSession().delete(entity);
    
    }
    
    public void deleteById(ID id) 	{
    
    getSession().delete(loadById(id));
    
    }
    
    @SuppressWarnings(unchecked)
    
    public List findAll() {
    
    return findByCriteria();
    
    }
    

    /**

    • Use this inside subclasses as a convenience method.
      */
      @SuppressWarnings(“unchecked”)
      protected List findByCriteria(Criterion… criterion) {
      Criteria crit = getSession().createCriteria(getPersistentClass());
      for (Criterion c : criterion) {
      crit.add©;
      }
      return crit.list();
      }

    /**

    • Find by criteria.
      
      */
      
      @SuppressWarnings(unchecked)
      
      public List findByCriteria(Map criterias) {
      
      Criteria criteria = getSession().createCriteria(getPersistentClass());
      
      criteria.add(Restrictions.allEq(criterias));
      
      return criteria.list();
      
      }
      

    /**

    • This method will execute an HQL query and return the number of affected entities.
      
      */
      
      protected int executeQuery(String query, String namedParams[],	Object params[]) {
      
      Query q = getSession().createQuery(query);
      
      if (namedParams != null) {
      
      for (int i = 0; i < namedParams.length; i++) {
      
      q.setParameter(namedParams[i], params[i]);
      
      }
      
      }
      

      return q.executeUpdate();
      }

    protected int executeQuery(String query) {
    
    return executeQuery(query, null, null);
    
    }
    

    /**

    • This method will execute a Named HQL query and return the number of affected entities.
      
      */
      
      protected int executeNamedQuery(String namedQuery, String namedParams[],	Object params[]) {
      
      Query q = getSession().getNamedQuery(namedQuery);
      
      if (namedParams != null) {
      
      for (int i = 0; i < namedParams.length; i++) {
      
      q.setParameter(namedParams[i], params[i]);
      
      }
      
      }
      

      return q.executeUpdate();
      }

    protected int executeNamedQuery(String namedQuery) {
    
    return executeNamedQuery(namedQuery, null, null);
    
    }
    
    @SuppressWarnings(unchecked)
    
    public List findByExample(T exampleInstance, String[] excludeProperty) {
    
    Criteria crit = getSession().createCriteria(getPersistentClass());
    
    Example example =  Example.create(exampleInstance).excludeZeroes().enableLike().ignoreCase();
    
    for (String exclude : excludeProperty) {
    
    example.excludeProperty(exclude);
    
    }
    
    crit.add(example);
    
    return crit.list();
    
    }	
    
    }
    

:frowning:

ELE RETORNA O SEGUINTE MOTIVO PARA O ERRO:

save is not valid without active transaction.

4 Respostas

fiaux

Não faltou abrir/criar uma transação?
PS: não olhei o código, use tag code

M

Obrigado, ja tinha resolvido, era isso mesmo. Usei o seguinte método:

getSession.beginTransaction();

	public void save(T entity) {
		try{
			getSession().beginTransaction();
			getSession().save(entity);
			getSession().beginTransaction().commit();
		
		}catch(HibernateException ex){
			getSession().beginTransaction().rollback();
			throw new RuntimeException("Problema ao salvar: "+ ex.getMessage());
		}
	}

Como estou iniciando com hibernate agora, achei que o salto-db encapsulava isso.

Obrigado!

L

Posta um (RESOLVIDO) no Assunto para distinguir dos que não foram resolvidos ainda

M
Criado 23 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 4
Participantes 3