Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JPA/JPQL/StoredProcedureQuery调用MaxDB存储过程_Java_Jpa_Stored Procedures_Jpql - Fatal编程技术网

Java 使用JPA/JPQL/StoredProcedureQuery调用MaxDB存储过程

Java 使用JPA/JPQL/StoredProcedureQuery调用MaxDB存储过程,java,jpa,stored-procedures,jpql,Java,Jpa,Stored Procedures,Jpql,当我尝试使用StoredProcedureRequesty(JPA/JPQL)调用MaxDBDBPROC(存储过程)时,出现“Invalid SQL statement”异常。这不是正确的方法吗 Java环境: > <persistence-unit name="CAMPAIGN_AD_UNIT_Test" > transaction-type="RESOURCE_LOCAL"> > <provider>org.eclipse.persisten

当我尝试使用StoredProcedureRequesty(JPA/JPQL)调用MaxDBDBPROC(存储过程)时,出现“Invalid SQL statement”异常。这不是正确的方法吗

Java环境:

> <persistence-unit name="CAMPAIGN_AD_UNIT_Test"
> transaction-type="RESOURCE_LOCAL">
>     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
>     <exclude-unlisted-classes>false</exclude-unlisted-classes>
>     <properties>
>       <property name="javax.persistence.jdbc.driver"   value="com.sap.dbtech.jdbc.DriverSapDB" />
>       <property name="javax.persistence.jdbc.url"      value="jdbc:sapdb://localhost/MAXDB" />
>       <property name="javax.persistence.jdbc.user"     value="ST" />
>       <property name="javax.persistence.jdbc.password" value="*********" />
>       <property name="eclipselink.target-database"         value="MaxDB"/> 
>       <property name="eclipselink.ddl-generation"      value="none" />
>     </properties>   </persistence-unit>

您是否尝试过将JDBC CallableStatement与MaxDB一起使用?只是并非所有的RDBMS都以相同的方式支持“存储过程”,如果CallableStatement可以工作,那么JPA2.1应该可以工作,因为它只是一个包装器。试试看?我注意到堆栈跟踪中的DB调用(
executeprocedure TESTPROC(活动=?)
)与正在测试的DB调用(
call TESTPROC(?)
)有些不同。你有没有试过运行前者,看看是否有一些奇怪的结果?-3005错误表明您的命令对于当前sql模式可能无效。谢谢Neil和Eric!埃里克,我也注意到了。在MaxDB中对DBProc的正确调用是“Call ST.TESTPROC(?)”。我不知道如何以及在何处更改EntityManager的SQL模式@Neil:是的,使用JDBC CallableStatement它就可以工作。字符串myCall=“call ST.TESTPROC(?);CallableStatement callStmt=conn.prepareCall(myCall);callStmt.registerOutParameter(1,java.sql.Types.INTEGER);int changed=callStmt.executeUpdate();System.out.println(“更改:+更改”);objectobj=callStmt.getObject(1);System.out.println(“结果:+String.valueOf(obj))@STR,也许EclipseLink在执行过程中添加了?我知道,当我在DataNucleus JPA中执行JPA StoredProcedureRequesty时,它只是在过程名称之前添加了“CALL”,所以一切正常。