Получение java.lang.NoSuchMethodError: javax/persistence/criteria/CriteriaBuilder.createCriteriaUpdate

Мой проект изначально основан на JPA 2.0, и я пытаюсь обновить его до JPA 2.1. Я пытаюсь использовать «CriteriaUpdate», который использует JPA 2.1. Я добавил hibernate-jpa-2.1-api в свой maven pom.xml, и у меня есть библиотека javax.persistence.criteria.CriteriaUpdate в папке. Однако я получаю следующую ошибку.

Caused by: java.lang.NoSuchMethodError: javax/persistence/criteria/CriteriaBuilder.createCriteriaUpdate(Ljava/lang/Class;)Ljavax/persistence/criteria/CriteriaUpdate;
at com.cfins.esbConsole.dao.AuthenticationDao.changeUsrPaswrd(AuthenticationDao.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at com.ibm.ejs.container.EJSContainer.invokeProceed(EJSContainer.java:5730)
at com.ibm.ejs.container.interceptors.InvocationContextImpl.proceed(InvocationContextImpl.java:568)
at org.apache.webbeans.ejb.common.interceptor.OpenWebBeansEjbInterceptor.callInterceptorsAndDecorators(OpenWebBeansEjbInterceptor.java:526)
at org.apache.webbeans.ejb.common.interceptor.OpenWebBeansEjbInterceptor.callToOwbInterceptors(OpenWebBeansEjbInterceptor.java:200)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at com.ibm.ejs.container.interceptors.InterceptorProxy.invokeInterceptor(InterceptorProxy.java:227)
at com.ibm.ejs.container.interceptors.InvocationContextImpl.proceed(InvocationContextImpl.java:548)
at org.apache.webbeans.ejb.WSEJBInterceptor.callToOwbInterceptors(WSEJBInterceptor.java:136)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at com.ibm.ejs.container.interceptors.InterceptorProxy.invokeInterceptor(InterceptorProxy.java:227)
at com.ibm.ejs.container.interceptors.InvocationContextImpl.proceed(InvocationContextImpl.java:548)
at com.ibm.ejs.container.interceptors.InvocationContextImpl.doAroundInvoke(InvocationContextImpl.java:229)
at com.ibm.ejs.container.EJSContainer.invoke(EJSContainer.java:5621)
... 47 more

Эти зависимости, которые я использую

      <!-- JPA -->
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>
 <!-- For date time api  -->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
    <version>2.2</version>
    </dependency>            

      <!-- Optional, but highly recommended. -->
      <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <version>5.10</version>
         <scope>test</scope>
         <classifier>jdk15</classifier>
      </dependency>

<!-- for session  -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

<dependency>
    <groupId>javax.ejb</groupId>
    <artifactId>ejb-api</artifactId>
    <version>3.0</version>
</dependency>

 <dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
</dependency>


      <!-- Needed on JBoss AS as EL is out of date -->
      <dependency>
         <groupId>org.glassfish.web</groupId>
         <artifactId>el-impl</artifactId>
         <scope>runtime</scope>
         <!-- FIXME this version should be in the Weld API BOM -->
         <version>2.1.2-b04</version>
      </dependency>
   </dependencies>

Я читал другой пост о подобных проблемах, и у меня ничего не получалось, например, обновление до Java ee 7 и удаление старых jpa-файлов hibernate. В чем проблема?


person Jenna Deng    schedule 08.12.2015    source источник
comment
Не стесняйтесь принять ответ, так как он отвечает на вопрос, который вы разместили   -  person Neil Stockton    schedule 20.01.2016


Ответы (3)


У вас есть jar JPA API 2.0 (или более ранний) где-то в CLASSPATH. Это все хорошо, помещая JPA API 2.1 в CLASSPATH, но вам также нужно удалить существующую банку.

person Neil Stockton    schedule 09.12.2015

У вас должно быть несколько банок Jpa.

person Ashish Ratan    schedule 30.01.2016

Установить в аспектах проекта версию JPA 2.1

person JLazar0    schedule 04.07.2019