java - 如何解决: java. lang.NoSuchMethodError : javax. persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;)

标签 java spring maven jpa weblogic

我得到

 java.lang.NoSuchMethodError: javax.persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;)Ljavax/persistence/StoredProcedureQuery;

请帮忙,我的配置有什么问题。

在我的代码中执行这一行时。

StoredProcedureQuery spq =em.createStoredProcedureQuery("User_pkg.Store_user_proc);

数据库过程有 5 个输入和 1 个整数输出参数。

我已经尝试过

How to enable Weblogic 12.1.2 JPA 2.1

https://docs.oracle.com/middleware/1213/wls/EJBAD/using_toplink.htm#EJBAD1510

启动weblogic服务器时,我能够看到JPA2.1的jar文件已加载

JAVA 内存参数

JAVA Memory arguments: -Xms256m -Xmx512m -XX:CompileThreshold=8000
-XX:PermSize=128m  -XX:MaxPermSize=256m

类路径

CLASSPATH=\oracle_common\modules\javax.persistence_2.1.jar;\wlserver\modules\com.oracle.weblogic.jpa21support_1.0.0.0_2-1;C:\PROGRA~1\Java\JDK18~1.0_1\lib\tools.jar;F:\weblogic\wlserver\server\lib\weblogic_sp.jar;F:\weblogic\wlserver\server\lib\weblogic.jar;F:\weblogic\oracle_common\modules\net.sf.antcontrib_1.1.0.0_1-0b3\lib\ant-contrib.jar;F:\weblogic\wlserver\modules\features\oracle.wls.common.nodemanager_2.0.0.0.jar;F:\weblogic\oracle_common\modules\com.oracle.cie.config-wls-online_8.1.0.0.jar;F:\weblogic\wlserver\common\derby\lib\derbynet.jar;F:\weblogic\wlserver\common\derby\lib\derbyclient.jar;F:\weblogic\wlserver\common\derby\lib\derby.jar;F:\weblogic\wlserver\server\lib\xqrl.jar

路径

PATH=;F:\weblogic\wlserver\server\native\win\x64;F:\weblogic\wlserver\server\bin;F:\weblogic\oracle_common\modules\org.apache.ant_1.9.2\bin;C:\PROGRA~1\Java\JDK18~1.0_1\jre\bin;C:\PROGRA~1\Java\JDK18~1.0_1\bin;C:\PROGRA~3\Oracle\Java\javapath;F:\oracle\product\112~1.0\dbhome_1\BIN;C:\PROGRA~2\HPSIMP~1\x64;C:\PROGRA~2\HPSIMP~1\;C:\PROGRA~2\Intel\ICLSCL~1\;C:\PROGRA~1\Intel\ICLSCL~1\;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WINDOW~1\v1.0\;C:\PROGRA~2\WIC4A1~1\Shared;C:\PROGRA~2\Intel\OPENCL~1\3.0\bin\x86;C:\PROGRA~2\Intel\OPENCL~1\3.0\bin\x64;C:\PROGRA~1\Intel\INTEL(~1\DAL;C:\PROGRA~1\Intel\INTEL(~1\IPT;C:\PROGRA~2\Intel\INTEL(~2\DAL;C:\PROGRA~2\Intel\INTEL(~2\IPT;C:\PROGRA~1\PuTTY\;C:\Android;C:\Windows\System32;F:\ant\APACHE~1.2-B\APACHE~1.2;C:\PROGRA~1\jEdit;C:\PROGRA~1\Java\JDK18~1.0_1\bin;C:\Users\HARITH~1\AppData\Local\MICROS~1\WINDOW~1;F:\ant\APACHE~1.2-B\APACHE~1.2\bin;F:\weblogic\wlserver\server\native\win\x64\oci920_8

JPA:EclipseLink 2.7.1

Weblogic 服务器配置。 版本:WebLogic服务器12.1.3.0.0 使用 Java 版本启动 weblogic: java版本“1.8.0_144” Java(TM) SE 运行时环境(版本 1.8.0_144-b01) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.144-b01,混合模式)

pom.xml

<i>
{
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.springmaven</groupId>
  <artifactId>springfort</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>springfort Maven Webapp</name>
  <url>http://maven.apache.org</url>
 <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- Servlet Library -->
        <!--http://mvnrepository.com/artifact/javax.servlet/javax.servletapi%20->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring dependencies -->
        <!-- http://mvnrepository.com/artifact/org.springframework/spring-core%20-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.1.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.1.RELEASE</version>
        </dependency>

        <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc%20-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.1.RELEASE</version>
        </dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>

 <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
 <!--   Spring EclipseLink JPA Dependency  -->

 <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>2.7.1</version>
    <scope>provided</scope>
</dependency>

 <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version> 
    </dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
    </dependencies>
  <build>
    <finalName>springfort</finalName>
      <plugins>

            <!-- Config: Maven Tomcat Plugin -->
            <!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin%20-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!-- Config: contextPath and Port (Default: /HelloSpringMVC : 8080) -->
                <!--
                <configuration>
                    <path>/</path>
                    <port>8899</port>
                </configuration>
                -->  
            </plugin>
        </plugins>
  </build>
</project>
}
</i>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="SYSTEM" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>OracleJNDIDS</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>

        <!-- List of JPA Class which has Implementation -->
         <!--  <class>com.springfort.jpa.registerUserJpa</class> -->  


        <properties>
            <property name="eclipselink.weaving" value="false"/>
            <property name="eclipselink.jpa.uppercase-column-names" value="true"/>
            <property name="eclipselink.logging.level" value="FINEST"/>
            <property name="eclipselink.logging.parameters" value="true"/>
            <property name="eclipselink.query-results-cache" value="false"/>
            <property name="eclipselink.cache.shared.default" value="false"/>
            <property name="eclipselink.cache.type.default" value="NONE"/>
            <property name="eclipselink.logging.level.sql" value="FINEST"/>
            <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
            <property name="eclipselink.jdbc.batch-writing.size" value="1000"/>
        </properties>
    </persistence-unit>
</persistence>

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>Archetype Created Web Application</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>springfort</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springfort</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

Weblogic.xml

<weblogic-web-app>
    <context-root>/springfort</context-root>
    <container-descriptor>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>
 </weblogic-web-app>

错误堆栈跟踪:

java.lang.NoSuchMethodError: javax.persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;)Ljavax/persistence/StoredProcedureQuery;
    at com.springfort.jpa.registerUserJpa.registerUserJpaImpl(registerUserJpa.java:40)
    at com.springfort.dao.userRegistrationDaoImpl.register(userRegistrationDaoImpl.java:44)
    at com.springfort.service.setUserRegistrationServiceImpl.setUserAttributes(setUserRegistrationServiceImpl.java:59)
    at com.springfort.userRegistrationController.registerUser(userRegistrationController.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:243)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3432)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

最佳答案

在 persistence.xml 中,schemaLocation 是 persistence_1_0.xsd ,并且从 jpa 2.1 开始支持存储过程,并且 pom 中的这一部分也是如此:

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

关于java - 如何解决: java. lang.NoSuchMethodError : javax. persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49555467/

相关文章:

java - 自定义 Java Swing GUI 与 Netbeans 拖放编辑器

java - Flyway 命令行中如何管理连接?

mysql - 什么是 org.h2.jdbc.JdbcSQLDataException : Invalid value "3" for parameter "columnIndex" [90008-200]?

java - 在 Spring 中使用验证将 ZonedDateTime 字段限制为毫秒时间的 3 位数字

maven - 结账时 Jenkins SVN "SSL peer shut down incorrectly"

java - SSL 异常 : "received close_notify during handshake" upon initializing Alexa Skill Management API (SMAPI)

java - 如果主机不存在,SocketChannel 的 connect 方法将保持挂起状态

java - 参数未传递给过程

maven - 使用 Maven 构建 war 文件时重命名目录

Maven 未拉取以下三个级别的依赖项