带有JPA 2.0 ClassCastException的Spring 3.0 ORM

Ke *_*CAI 5 spring jpa

我正在尝试在Spring 3.0 ORM中使用JPA 2.0.JPA供应商是Hibernate 3.5.0-Beta-3.

它适用于JPQL,但是当我尝试使用CriteriaQuery时,会发生异常:

java.lang.ClassCastException:$ Proxy50无法转发到com.absorbx.retailx.dao.impl.ShopDaoImpl.findByCrieria(ShopDaoImpl.java:30)的$ Proxy38.createQuery(未知来源)的javax.persistence.TypedQuery. solar.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)资源)

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

}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

axt*_*avt 3

这似乎是 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));
    ...
}
Run Code Online (Sandbox Code Playgroud)

最好创建一个问题。