Я пытаюсь использовать JPA 2.0 в Spring 3.0 ORM. Поставщик JPA, в спящем режиме 3.5.0 Бет 3.
Это работает хорошо с JPQL, но когда я пытался использовать CriteriaQuery, исключение происходит:
java.lang. ClassCastException: $Proxy50 не может быть брошен к javax.persistence. TypedQuery на уровне $Proxy38.createQuery (Неизвестный Источник) в com.absorbx.retailx.dao.impl. ShopDaoImpl.findByCrieria(ShopDaoImpl.java:30) в com.absorbx.retailx.dao. SimpleDaoTest.testFindByCriteria(SimpleDaoTest.java:39) в sun.reflect. NativeMethodAccessorImpl.invoke0 (Собственный метод) в sun.reflect. NativeMethodAccessorImpl.invoke (Неизвестный Источник) в sun.reflect. DelegatingMethodAccessorImpl.invoke (Неизвестный Источник)
Код ДАО:
@Repository
public class ShopDaoImpl implements
ShopDao {
@PersistenceContext
transient EntityManager entityManager;
@Override
public Shop findByCrieria() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery c = cb.createQuery(Shop.class);
Root shop = c.from(Shop.class);
c.select(shop).where(cb.equal(shop.get("name"), "petstore"));
TypedQuery q = entityManager.createQuery(c);
return q.getSingleResult();
}
}
Как я решаю эту проблему?
Похоже, что BUG весной:
ORG / SPRILLFRAMEWORK / 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));
...
}
Было бы лучше создать проблему.