2010-01-20 18 views
5

JPA 2.0 Spring 3.0 ORM'de kullanmaya çalışıyorum. JPA satıcısı, Hibernate 3.5.0-Beta-3'tür.Spring 3.0 ORM, JPA 2.0 ClassCastException ile

O JPQL iyi çalışır, ancak CriteriaQuery kullanmaya çalıştığında, bir istisna olur

: $ Proxy50 $ 'de javax.persistence.TypedQuery için döküm edilemez:

java.lang.ClassCastException com.absorbx.retailx.dao.SimpleDaoTest.testFindByCriteria de Proxy38.createQuery com.absorbx.retailx.dao.impl.ShopDaoImpl.findByCrieria (ShopDaoImpl.java:30) 'den (Bilinmeyen Kaynak) (SimpleDaoTest.java:39) , sun.ref sun.reflect.DelegatingMethodAccessorImpl.invoke de sun.reflect.NativeMethodAccessorImpl.invoke (Bilinmeyen Kaynak) (Bilinmeyen Kaynak)

DAO kodu lect.NativeMethodAccessorImpl.invoke0 (Ana yöntemi):

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

} 

Bu sorunu nasıl çözebilirim?

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

sorunu yaratmak daha iyi olurdu

cevap

4

Bahar bir hata gibi görünüyor.

+0

İyi yakalama. Yay, sorgunun "Sorgu" örneğinin olup olmadığını denetler ve bu türün proxy'sini oluşturur. Ne yazık ki, "TypedQuery", "Sorgu" nun bir alt türüdür ve oluşturulan proxy hala "Sorgu" yı uygulayacaktır. "TypedQuery" JavaEE 6'da tanıtıldı, bu nedenle Spring'in 3 * * düzgün bir şekilde JavaEE 6'yı ele geçirmesi beklenirken, Spring'in neden başa çıkmadığı anlaşılabilir. Kesinlikle bir böcek. – skaffman

+1

Teşekkürler, ahbap. Oluşturdu issuse: http://jira.springframework.org/browse/SPR-6733 Hata bildirmek için ilk kez budur :) –

+0

Ve sadece düzeltildi :) – skaffman