2012-04-24 127 views
5

我介绍JPA2.0在我的应用程序上的Oracle9i数据库工作,我增加了库的EclipseLink(JPA2.0),并建立了实体类,但是当我使用实体管理器没有办法getCriteriaBuilder()

javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); 

我收到以下错误

找不到符号 符号:方法getCriteriaBuilder() 位置:接口javax.persistence.EntityManager

我的web.xml是2.4版本,这是我的persistence.xml

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="MiraclinPU" transaction-type="JTA"> 
    <jta-data-source>jdbc/Miraclin</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties/> 
    </persistence-unit> 
</persistence> 

它看起来像应用程序使用JPA1.0,因为我在论坛上阅读...任何人都可以帮忙吗?

+1

找到一个名为persistence-1.0.jar或类似的jar,将其从类路径中移除,并将其替换为一个名为persistence-2.0.jar或类似的名称。这是所有 – 2012-04-24 13:27:01

+1

我发现它在一个巨大的JasperLib ejb3-persistence.jar中,我删除了整个库,它的工作......谢谢。 – Questionmark 2012-04-24 13:47:34

+0

不错。现在你应该写出答案并接受答案。 – 2012-04-24 13:50:08

回答

5

搜索包含在项目中的所有库,然后删除那些包含persistence.xml(除了需要的)之外的库。然后再重新包括它们。

0

你的类路径中有ejb3-persistence.jar。

其实体管理器没有此方法。

0

缺少

import javax.persistence.criteria.*; 

可能?

3

用途:

<dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 

而不是:

<dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
2

在Eclipse:

  • 项目 - >属性 - > Java构建路径 - >配置构建路径 - >库
  • 删除对javax/persistente的引用
  • 插入一个参考冬眠,JPA-2.0-API-/ /.jar

如何验证:

在sourceDAO.java按

F3中的EntityManagerFactory和寻找什么。 jar日食开放。

相关问题