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;
}
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();
}
}
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!