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
İ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
Teşekkürler, ahbap. Oluşturdu issuse: http://jira.springframework.org/browse/SPR-6733 Hata bildirmek için ilk kez budur :) –
Ve sadece düzeltildi :) – skaffman