2010-08-16 32 views
1

从Oracle视图中的列我有现有工作查询使用以下JPQL无法选择使用JPA 2标准API

SELECT COUNT(o.id) FROM MyEntityView o 

我重构映射到Oracle视图的实体选择的列它使用JPA 2标准API与下面的代码:

MyEntityView model = new MyEntityView(); 
    CriteriaBuilder criteriaBuilder = model.entityManager().getCriteriaBuilder(); 
    CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class); 
    Root<MyEntityView > theView = criteriaQuery.from(MyEntityView.class); 

    criteriaQuery.select(criteriaBuilder.count(theView.get(MyEntityView_.id))); // ERROR! 
    TypedQuery<Long> query = model.entityManager().createQuery(criteriaQuery); 
    .... 

但它创造的select语句生成以下错误:

java.lang.NullPointerException 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:110) 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:218) 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:189) 
    at com.mycomp.domain.view.MyEntityViewIntegrationTest.testMarkerMethod(MyEntityViewIntegrationTest.java:35) 

我试图将映射更改为表而不是视图并且它确实工作正常。

这是一个Hibernate的Bug还是我错过了什么?

+0

将字符串检索从字符串更改为MetaModel以防止混淆。 – Joopiter 2010-08-16 11:54:47

回答

1

听起来像错误(类似于JPA 2 CriteriaQuery Using ID columns throws Null Pointer EX报告的问题),我无法找到一个现有的JIRA问题的,并建议建立一个新的。

这就是说,我并没有真正看到在这里使用CriteriaQuery这一点,特别是如果您不使用静态元模型来实现完整的类型安全。这可能是一个简化的例子。

+0

谢谢,这是一个简单的例子。同时,我会诉诸JPQL – Joopiter 2010-08-16 11:23:21