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?
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
Dzięki, stary. Stworzyłem wydanie: http://jira.springframework.org/browse/SPR-6733 To jest mój pierwszy raport o błędzie :) –
I to właśnie zostało naprawione :) – skaffman