【发布时间】:2011-10-14 23:21:41
【问题描述】:
我对 Criteria API 还是很陌生,事实上,我只是为了 Criteria API 将我们的最新项目推送到 JBoss 6 和 JPA 2.0。
现在我正在尝试运行最简单的查询,但不知何故没有成功:
如果没有 Criteria API,它可以正常工作(Msv 是我的实体类):
Msv someMsv = manager.find(Msv.class, 1234L);
System.out.println(someMsv);
然而,标准的东西并没有给我来自数据库的任何结果:
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Msv> criteriaQuery = builder.createQuery(Msv.class);
Root<Msv> from = criteriaQuery.from(Msv.class);
// this returns null! /\
Path<Msv> pk = from.get("PK_MSV_NR");
Expression<Boolean> exp = builder.equal(pk, 1234L);
CriteriaQuery<Msv> select = criteriaQuery.select(from).where(exp);
[...]
在运行第二个代码片段时,我在第 5 行(路径 pk ...)抛出 NullPointerException,因此上面的 cireriaQuery.from 返回 null。
我是否遗漏了一些重要的东西,或者这里有什么问题?第一个 sn-p 能够从数据库中提取正确的条目并对其进行 syso,所以我认为这不是我的持久性配置的问题,而是我的 Criteria API 代码的问题。但是我从教程中提取的那个基本上是一行一行的......
技术:我正在使用 hibernate-3.6.6、hibernate-jpa-2.0-cr、jboss-as-6.0.0 和 oracle11。
编辑: 对此进行了更多研究并发现了以下内容:实际上并不是 criteriaQuery.from(...) 产生了 null。 NullPointerException 没有被抛出,因为 .get() 是在 null 上调用的,但 实际上是由/在 .get() 方法中抛出的。但是,我一生都看不到为什么...
【问题讨论】:
标签: hibernate jakarta-ee persistence jpa-2.0 criteria-api