2010-01-20 18 views
5

Próbuję użyć JPA 2.0 w Spring 3.0 ORM. Dostawca WZP to Hibernate 3.5.0-Beta-3.Wiosna 3.0 ORM z JPA 2.0 ClassCastException

Działa dobrze z JPQL, ale kiedy próbowałem użyć CriteriaQuery wyjątek dzieje:

java.lang.ClassCastException: Proxy50 $ nie może być rzutowany na javax.persistence.TypedQuery na $ Proxy38.createQuery (Unknown Source) na com.absorbx.retailx.dao.impl.ShopDaoImpl.findByCrieria (ShopDaoImpl.java:30) na com.absorbx.retailx.dao.SimpleDaoTest.testFindByCriteria (SimpleDaoTest.java:39) pod adresem sun.ref lect.NativeMethodAccessorImpl.invoke0 (Język Method) w sun.reflect.NativeMethodAccessorImpl.invoke (nieznane Źródło) na sun.reflect.DelegatingMethodAccessorImpl.invoke (nieznane źródło)

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

} 

Jak rozwiązać ten problem?

Odpowiedz

4

Wydaje się, że to błąd w Wiosna:

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

Byłoby lepiej, aby stworzyć problem.

+0

Dobry połów. Spring sprawdza, czy zapytanie jest instancją 'Query' i generuje proxy tego typu. Niestety, 'TypedQuery' jest podtypem' Query', a wygenerowany serwer proxy nadal będzie implementował tylko 'Query'. W języku JavaEE 6 wprowadzono słowo "TypedQuery", więc zrozumiałe jest, dlaczego Spring go nie obsługuje, chociaż Spring 3 * ma prawidłowo obsłużyć JavaEE 6. Zdecydowanie błąd. – skaffman

+1

Dzięki, stary. Stworzyłem wydanie: http://jira.springframework.org/browse/SPR-6733 To jest mój pierwszy raport o błędzie :) –

+0

I to właśnie zostało naprawione :) – skaffman

Powiązane problemy