我对Criteria API很陌生,事实上我只是将我们最新的项目推送到JBoss 6和JPA 2.0,仅用于Criteria API。
现在我正在尝试运行最简单的查询,但不知何故没有成功:
没有Criteria API它没有问题(Msv是我的实体类):
Msv someMsv = manager.find(Msv.class, 1234L);
System.out.println(someMsv);
然而标准的东西并没有给我任何DB的结果:
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行(Path pk ...)上抛出了NullPointerException,因此上面的cireriaQuery.from返回null。
我是否遗漏了一些必要的东西,或者这里有什么问题?第一个片段能够从数据库和syso中提取正确的条目,所以我认为它不是我的persistance配置的问题,而是我的Criteria API代码。但是那个我基本上逐行从教程中提取的那个......
Tech:我正在使用hibernate-3.6.6,hibernate-jpa-2.0-cr,jboss-as-6.0.0和oracle11。
修改 再看一下这个并发现以下内容:实际上并不是 criteriaQuery.from(...)产生null。不抛出NullPointerException,因为 .get()在null上调用,但实际上是由/ in .get()方法引发的。我可以为我的生活不明白为什么......
答案 0 :(得分:0)
唉,我终于发现了我做错了什么。当我让eclipse为我生成实体类时,我没有足够重视他们的领域的命名。
我正在寻找的字段在数据库中称为“PK_MSV_NR”,但是eclipse在实体类中将其命名为“pkMsvNr”。因此问题。
尽管如此,我认为抛出NullPointerException是一种奇怪的行为。这里真的没有太多的指向......