1

次のJPQLを使用して、Oracleビューにマップされたエンティティから列を選択する既存の作業問合せがあります

    SELECT COUNT(o.id) FROM MyEntityView o

次のコードで JPA 2 Criteria 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)

ビューではなくテーブルへのマッピングを変更しようとしましたが、正しく機能します。

これは休止状態のバグですか、それとも何か不足していますか?

4

1 に答える 1

1

これはバグのように聞こえます( JPA 2 CriteriaQuery Using ID columns throws Null Pointer EXで報告された問題と同様)、既存の Jira の問題を見つけることができず、新しい問題を作成することをお勧めします。

CriteriaQueryそうは言っても、完全な型安全性のために静的メタモデルを使用しない場合は特に、ここでa を使用する意味がわかりません。ただし、単純化された例かもしれません。

于 2010-08-16T10:47:50.557 に答える