Java 使用JPA/JPQL/StoredProcedureQuery调用MaxDB存储过程
当我尝试使用StoredProcedureRequesty(JPA/JPQL)调用MaxDBDBPROC(存储过程)时,出现“Invalid SQL statement”异常。这不是正确的方法吗 Java环境: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
> <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”,所以一切正常。