2010-08-16 30 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