我使用NetBeans 6.8构建Spring MVC应用程序。
技术:
我使用来自实体类的新JPA控制器类来添加ORM文件。它应该生成用于使用我的POJO文件管理查询的类。
问题是,NetBeans生成以下代码,并且不会编译:
public int getBrandCount() {
EntityManager em = getEntityManager();
try {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Root<Brand> rt = cq.from(Brand.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
} finally {
em.close();
}
}
在图片中,存在NetBeans错误: alt text http://i46.tinypic.com/dy0t1d.jpg
看起来Entity Manager Interface的方法getCriteriaBuilder
未实现。或者其他一些我无法在代码中使用它的原因。
我不知道我应该提供哪些其他信息,所以请问您是否有任何想法。
由于
答案 0 :(得分:2)
我遇到了这个问题,发现我在项目库管理器列表中的Persistence(JPA 2.0)库上面有Hibernate JPA库(包含在Netbeans中)。我将Persistence移到了Hibernate之上,它清除了编译问题。
答案 1 :(得分:1)
NetBeans正在生成JPA 2.0代码,因此您需要在类路径上使用JPA 2.0 API来编译代码(以及运行它的JPA 2.0提供程序)。由于您正在使用Hibernate,以下是使用Hibernate Entity Manager 3.5.1-Final所需的库:
org.hibernate:hibernate-entitymanager:jar:3.5.1-Final:compile +- org.hibernate:hibernate-core:jar:3.5.1-Final:compile | +- antlr:antlr:jar:2.7.6:compile | +- commons-collections:commons-collections:jar:3.2:compile | +- dom4j:dom4j:jar:1.6.1:compile | | \- xml-apis:xml-apis:jar:1.0.b2:compile | \- javax.transaction:jta:jar:1.1:compile +- org.hibernate:hibernate-annotations:jar:3.5.1-Final:compile | \- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile +- cglib:cglib:jar:2.2:compile | \- asm:asm:jar:3.1:compile +- javassist:javassist:jar:3.9.0.GA:compile \- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
答案 2 :(得分:0)
使用
部署项目时遇到类似的问题从数据库映射类实体时,我将它与注释混合在一起,因此Java Persistence Controller可以轻松生成控制器。问题是一样的。 getCriteriaBuilder是问题,因为JPA 1.0不支持它。我已经在项目类路径中检查了它,并且我发现由于项目导入了两个持久性库,即来自ejb3和EclipseLink(JPA2.0)的持久性库,因此未使用持久性库。
当我删除ejb持久性库时,getCriteriaBuilder对我来说很好。