Estoy tratando de usar JPA 2.0 en Spring 3.0 ORM. El vendedor de JPA es Hibernate 3.5.0-Beta-3.Spring 3.0 ORM con JPA 2.0 ClassCastException
Funciona bien con JPQL, pero cuando traté de usar CriteriaQuery, ocurre una excepción:
java.lang.ClassCastException: $ Proxy50 no se puede convertir a javax.persistence.TypedQuery en $ Proxy38.createQuery (origen desconocido) en com.absorbx.retailx.dao.impl.ShopDaoImpl.findByCrieria (ShopDaoImpl.java:30) en com.absorbx.retailx.dao.SimpleDaoTest.testFindByCriteria (SimpleDaoTest.java:39) en sun.ref lect.NativeMethodAccessorImpl.invoke0 (Nativo Método) en sun.reflect.NativeMethodAccessorImpl.invoke (Desconocido Fuente) en sun.reflect.DelegatingMethodAccessorImpl.invoke (Desconocido Fuente)
El código DAO:
@Repository
public class ShopDaoImpl implements
ShopDao {
@PersistenceContext
transient EntityManager entityManager;
@Override
public Shop findByCrieria() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Shop> c = cb.createQuery(Shop.class);
Root<Shop> shop = c.from(Shop.class);
c.select(shop).where(cb.equal(shop.get("name"), "petstore"));
TypedQuery<Shop> q = entityManager.createQuery(c);
return q.getSingleResult();
}
}
¿Cómo resuelvo este problema?
Buena captura. Spring está comprobando si la consulta es una instancia de 'Query' y genera el proxy de ese tipo. Desafortunadamente, 'TypedQuery' es un subtipo de' Query', y el proxy generado solo implementará 'Query'. 'TypedQuery' se introdujo en JavaEE 6, por lo que es comprensible por qué Spring no lo maneja, aunque se supone que Spring 3 * maneja JavaEE 6 correctamente. Definitivamente un error. – skaffman
Gracias, amigo. Creé issuse: http://jira.springframework.org/browse/SPR-6733 Es la primera vez que informo el error :) –
Y simplemente se ha corregido :) – skaffman