Concorrencia no hibernate

2 respostas
filipeandrep

Galera,

estou trabalhando com hibernate com annotations e estao acontecendo algumas coisas no minimo estranhas... quando eu faço uma consulta passando uma classe como criteria o hibernate esta buscando em outra... Por favor me ajudem. Segue o codigo:

codigo dao.java

package br.gov.inca.publico.dao;

import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;

public class Dao<T> {
	private static Logger log = Logger.getLogger(Dao.class);

	public Dao(){
	}
	public void inserirAtualizar(Object obj) throws Exception {
		try{
			Session session = CreateSession.getSession();
			Transaction tx = session.beginTransaction();
			session.saveOrUpdate(obj);
			log.info("Inserindo ou atualizando um objeto...");
			log.debug(obj);
			tx.commit();
			log.info("Objeto inserido ou atualizado!");
			session.close();
		}catch(Exception e){
			log.fatal(e);
		}
	}
	public ArrayList<T> buscar(Object obj, ArrayList<Criterion> criterios) throws Exception {
		Session session = CreateSession.getSession();
		Criteria criteria = session.createCriteria(Object.class);
		log.debug(obj);
		log.info("Buscando objeto...");
		for(Criterion criterion : criterios)
			criteria.add(criterion);
		log.debug(obj);
		return (ArrayList<T>)criteria.list();
	}
	public void excluir(Object obj) throws Exception {
		try{
			Session session = CreateSession.getSession();
			Transaction tx = session.beginTransaction();
			session.delete(obj);
			log.debug(obj);
			log.info("Excluindo o objeto ");
			tx.commit();
			log.info("Objeto excluído!");
			session.close();
		}catch(Exception e){
			log.fatal(e);
		}
	}
	public Object carregar(Class obj, int value)throws Exception{
		Session session = CreateSession.getSession();
		log.info("Carregando o objeto ");
        return session.load(obj,value);
    }
}

Categoria.java

package br.gov.inca.publico.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

@SuppressWarnings("serial")
@Entity 
@SequenceGenerator(name = "SEQUENCE", sequenceName = "categoria_id_categoria_seq") 
public class Categoria implements Serializable{
	 
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "SEQUENCE")
	@Column(name="id_categoria")
	private int idCategoria;
	@Column(name="identificador_categoria")
	private String identificadorCategoria;
	@Column(name="descricao_categoria")
	private String descricaoCategoria;
	
	//private Set<RCBP> rcbps = new HashSet<RCBP>();

	public String getDescricaoCategoria() {
		return descricaoCategoria;
	}

	public void setDescricaoCategoria(String descricaoCategoria) {
		this.descricaoCategoria = descricaoCategoria;
	}

	public int getIdCategoria() {
		return idCategoria;
	}

	public void setIdCategoria(int idCategoria) {
		this.idCategoria = idCategoria;
	}

	public String getIdentificadorCategoria() {
		return identificadorCategoria;
	}

	public void setIdentificadorCategoria(String identificadorCategoria) {
		this.identificadorCategoria = identificadorCategoria;
	}
	//@OneToMany(mappedBy="categoria", cascade=CascadeType.REMOVE, fetch=FetchType.LAZY)
	/*public Set<RCBP>getRcbps() {
		return rcbps;
	}

	public void setRcbps(Set <RCBP>rcbps) {
		this.rcbps = rcbps;
	}*/
	 
}

HibernateTest.java

package br.gov.inca.publico.test;

import java.util.ArrayList;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;
import br.gov.inca.publico.bean.Categoria;
import br.gov.inca.publico.dao.Dao;


public class HibernateTest {
	public static void main(String args[]){
		Categoria cat = new Categoria();
		cat.setDescricaoCategoria("teste descricao");
		cat.setIdentificadorCategoria("teste identificador 2");
		try{ 
			/*System.out.println("Iniciando persistencia");
			Dao<Categoria> categoriaDao = new Dao<Categoria>();
			categoriaDao.inserirAtualizar(cat);
			System.out.println("Persistencia realizada");
			
			cat = (Categoria)categoriaDao.carregar(Categoria.class,150);
			System.out.println(cat.getDescricaoCategoria());
			System.out.println(cat.getIdentificadorCategoria());*/
			
			Dao<Categoria> daoCategoria = new Dao<Categoria>();
			ArrayList<Criterion> criterios = new ArrayList<Criterion>();
			criterios.add(Expression.like("identificadorCategoria","%%"));
			
			for(Categoria item : daoCategoria.buscar(cat,criterios)){
				System.out.println(item.getIdentificadorCategoria());
				System.out.println(item.getDescricaoCategoria());
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
mensagem de erro
could not resolve property: identificadorCategoria of: br.gov.inca.publico.bean.Instituicao
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
	at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1375)
	at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)
	at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1350)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:434)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:394)
	at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at br.gov.inca.publico.dao.Dao.buscar(Dao.java:38)
	at br.gov.inca.publico.test.HibernateTest.main(HibernateTest.java:30)

2 Respostas

nicoweda

O erro naum ta rolando na sua classe Instituicao naum?
Ela por acaso tem o atributo “identificadorCategoria”?

[]'s

A

Olhando beeem por cima, acredito que o erro esta na linha abaixo, no metodo buscar:

Criteria criteria = session.createCriteria(Object.class);

Em vez de Object.class, tente obj.getClass().

Criado 15 de maio de 2007
Ultima resposta 15 de mai. de 2007
Respostas 2
Participantes 3