NetBeans生成错误的JpaController

时间:2010-06-12 19:22:07

标签: java hibernate netbeans jpa spring-mvc

我使用NetBeans 6.8构建Spring MVC应用程序。

技术:

  • Spring MVC 2.5
  • Derby DB
  • Hibernate for ORM
  • GlassFish v3服务器

我使用来自实体类的新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未实现。或者其他一些我无法在代码中使用它的原因。

我不知道我应该提供哪些其他信息,所以请问您是否有任何想法。

由于

3 个答案:

答案 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)

使用

部署项目时遇到类似的问题
  • Netbeans 7.0.1
  • Apache Tomcat 7
  • Hibernate 3

从数据库映射类实体时,我将它与注释混合在一起,因此Java Persistence Controller可以轻松生成控制器。问题是一样的。 getCriteriaBuilder是问题,因为JPA 1.0不支持它。我已经在项目类路径中检查了它,并且我发现由于项目导入了两个持久性库,即来自ejb3和EclipseLink(JPA2.0)的持久性库,因此未使用持久性库。

当我删除ejb持久性库时,getCriteriaBuilder对我来说很好。