tags:

views:

654

answers:

1

I'm trying to use JPA 2.0 in Spring 3.0 ORM. The JPA vendor is Hibernate 3.5.0-Beta-3.

It works well with JPQL, but when I tried to use CriteriaQuery, an exception happens:

java.lang.ClassCastException: $Proxy50 cannot be cast to javax.persistence.TypedQuery at $Proxy38.createQuery(Unknown Source) at com.absorbx.retailx.dao.impl.ShopDaoImpl.findByCrieria(ShopDaoImpl.java:30) at com.absorbx.retailx.dao.SimpleDaoTest.testFindByCriteria(SimpleDaoTest.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

The DAO code:

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

}

How do I solve this problem?

+3  A: 

It seems to be a bug in Spring:

org/springframework/orm/jpa/SharedEntityManagerCreator.java:

if (result instanceof Query) {
    Query query = (Query) result;
    ...
    result = Proxy.newProxyInstance(Query.class.getClassLoader(), 
        new Class[] {Query.class}, new DeferredQueryInvocationHandler(query, target));
    ...
}

It would be better to create an issue.

axtavt
Good catch. Spring is checking to see if the query is an instance of `Query`, and generates the proxy of that type. Unfortunately, `TypedQuery` is a subtype of `Query`, and the generated proxy will still only implement `Query`. `TypedQuery` was introduced in JavaEE 6, so it's understandable why Spring doesn't handle it, although Spring 3 *is* supposed to handle JavaEE 6 properly. Definitely a bug.
skaffman
Thanks, dude.I created issuse:http://jira.springframework.org/browse/SPR-6733It's my first time to report bug:)
Ke CAI
And it's just been fixed :)
skaffman
yes, thank you mate.
Ke CAI