Java NetBeans生成带有错误的JPA控制器

Java NetBeans生成带有错误的JPA控制器,java,hibernate,netbeans,jpa,spring-mvc,Java,Hibernate,Netbeans,Jpa,Spring Mvc,我正在使用NetBeans 6.8构建SpringMVC应用程序 技术: SpringMVC2.5 德比数据库 为ORM休眠 GlassFish v3服务器 我使用实体类中的新JPA控制器类添加ORM文件。它应该生成用于管理带有我的POJO文件的查询的类 问题是,NetBeans生成以下代码,并且不会编译: public int getBrandCount() { EntityManager em = getEntityManager(); try {

我正在使用NetBeans 6.8构建SpringMVC应用程序

技术:

  • SpringMVC2.5
  • 德比数据库
  • 为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();
        }
    }
public int getBrandCount(){
EntityManager em=getEntityManager();
试一试{
CriteriaQuery cq=em.getCriteriaBuilder().createQuery();
根rt=cq.from(品牌等级);
选择(em.getCriteriaBuilder().count(rt));
查询q=em.createQuery(cq);
返回((长)q.getSingleResult()).intValue();
}最后{
em.close();
}
}
在图中,出现了NetBeans错误:

看起来的方法
getCriteriaBuilder
尚未实现。或者我不能在代码中使用它的其他原因

我不知道我应该提供什么其他信息,所以请询问您是否想到了什么


谢谢

NetBeans正在生成JPA2.0代码,因此您需要类路径上的JPA2.0API来编译代码(并需要JPA2.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 org.hibernate:hibernate entitymanager:jar:3.5.1-Final:compile +-org.hibernate:hibernate核心:jar:3.5.1-Final:compile |+-antlr:antlr:jar:2.7.6:compile |+-commons集合:commons集合:jar:3.2:compile |+-dom4j:dom4j:jar:1.6.1:compile |\ xmlapi:xmlapi:jar:1.0.b2:compile |\-javax.transaction:jta:jar:1.1:compile +-org.hibernate:hibernate注释:jar:3.5.1-Final:compile |\-org.hibernate:hibernate commons注释:jar:3.2.0.Final:compile +-cglib:cglib:jar:2.2:compile |\-asm:asm:jar:3.1:编译 +-javassist:javassist:jar:3.9.0.GA:compile \-持久性:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
我在部署项目时遇到了类似的问题

  • Netbeans 7.0.1
  • ApacheTomcat7
  • 冬眠3
在从数据库映射类实体时,我将其与注释混合在一起,以便Java持久性控制器可以轻松生成控制器。问题是一样的。getCriteriaBuilder是个问题,因为JPA1.0不支持它。我在项目类路径中检查了它,发现持久性库没有使用,因为项目导入了两个持久性库,即来自ejb3和EclipseLink(JPA2.0)的持久性库


当我删除ejb持久性库时,getCriteriaBuilder对我来说运行良好

我遇到了这个问题,发现我在项目库管理器列表中有Hibernate JPA库(随Netbeans一起提供)高于持久性(JPA 2.0)库。我将持久性移到Hibernate之上,它解决了编译问题。

看来JPA2.0+Derby DB不是好朋友。它实际上在MySQL中工作得更好:-这与MySQL或Derby无关(在JPA2.0中工作得很好)。