JPA + DAOGenerico + findOne!

0 respostas
J

Dae galera, não sei o que está acontecendo, eu criei um GenericDAO da seguinte forma:

public class GenericDAOJPA<PK,T> {
    
    public EntityManager em;    
    private Class<T> clazz;
    private String unitName;
    
    public GenericDAOJPA( String unitName, Class<T> clazz) {
    	this.unitName = unitName;        
        this.clazz = clazz;
    }
    
    protected void close() {
    	if( this.em != null && this.em.isOpen()) {
	        this.em.close();
	        this.em = null;
    	}
    }

...

@SuppressWarnings("unchecked")
	public T findOne( HashMap<String, Object> parametros) throws PersistenciaException {
    	this.em = PersistenceUtil.getEntityManager(unitName);
        String jpaQL = String.format("SELECT MAX(o) FROM %s AS o WHERE 1 = 1 ", this.clazz.getSimpleName());         
        Query query = null;
        T one = null;
        try {
	        if( parametros != null ) {
	            // Monta a query
	            Iterator it = parametros.keySet().iterator();
	            while( it.hasNext()) {
	                String key = ( String )it.next();     
                    jpaQL += " AND o."+key+" = :P"+key;                                 
	            }
	            query = this.em.createQuery(jpaQL);
	            Iterator itQ = parametros.keySet().iterator();
	            while( itQ.hasNext()) {
	                String key = ( String )itQ.next();  
	                query.setParameter("P"+key, parametros.get(key));                
	            }            
	            one = (T) query.getSingleResult();
	        }
       } finally {
       	close();
       }
       return one;
    }
Dae os meus DAO's, implementam uma interface com as operações básicas e extendem esse DAOGenerico, dessa forma eles tem as operações básicas, o único método que não está funcionando no GenericDAO é o mencionado acima, que diz que não consegue fazer um cast de Object para Grupo! Para teste eu executo esse código e dá o seguinte erro:
public static void main(String[] args) {
	
	BaseInterfaceDAO<Integer, Grupo> dao = DAOFactory.getDAO(Grupo.class);
	HashMap<String, Object> mp = new HashMap<String, Object>();
	mp.put("codGrupo", new Integer(1));
	mp.put("descGrupo", "Qualquer");
	try {
		Grupo grupo = dao.findOne(mp);
	} catch (PersistenciaException e) {
		e.printStackTrace();
	}
}
Erro:
Hibernate: select MAX(grupo0_.CodGrupo) from Grupo grupo0_ where 1=1 and grupo0_.descGrupo=? and grupo0_.CodGrupo=? limit ?
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.gerenciadorProjetos.modelo.Grupo
	at teste.main(teste.java:22)

A entidade está configurada corretamente pois as outras operações funcionam em cima dela, não sei o que está acontecendo.. alguém sabe como resolver para recuperar apenas um registro utilizando a Query?
Abraço!

Criado 18 de novembro de 2008
Respostas 0
Participantes 1