java - 无法使用 JPA 2 Criteria API 从 Oracle View 中选择列

标签 java oracle hibernate jpa-2.0 criteria-api

我有一个现有的工作查询,它使用以下 JPQL 从映射到 Oracle View 的实体中选择列

    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)

我尝试将映射更改为表而不是 View ,并且它确实可以正常工作。

这是一个 Hibernate Bug 还是我遗漏了什么?

最佳答案

听起来像是一个错误(类似于 JPA 2 CriteriaQuery Using ID columns throws Null Pointer EX 中报告的问题),我找不到它的现有 Jira 问题,建议创建一个新问题。

话虽这么说,我真的不明白在这里使用 CriteriaQuery 的意义,特别是如果您不使用静态元模型来实现完全类型安全的话。但这可能是一个简化的例子。

关于java - 无法使用 JPA 2 Criteria API 从 Oracle View 中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491014/

相关文章:

java - 我应该如何解决这种错误

java - SWT StyledText - 带有 MeasureItem 监听器的表跳转到顶部

javascript - APEX:如何实现循环级联选择列表(多对多)

php - 我正在开发一个 php 购物 list 函数/api

java - 在最大等待时间后,c3p0 非 Activity 连接不会从连接池中剔除

java - FetchType.EAGER 不获取对象

java - 我可以使用 Spring Boot 在正在运行的应用程序上添加数据库连接吗?

java - maven 没有从我的本地存储库中选择依赖项

python - Django 和 Oracle DB 失去联系

java - Hibernate - 两个类之间的多个多对多关联