Have you tried using a different MySQL driver? I ran into general database issues when trying to use MySQL 4.X with the latest greatest MySQL Driver. I now use MySQL connector 3.0.17 and have not had database issues and that includes working with OpenJPA 1.2.1
-----Original Message----- From: Dinkar Rao [mailto:[email protected]] Sent: Saturday, February 27, 2010 9:04 PM To: [email protected] Subject: MySQL 4.1.22 + Native Query = Callable statements not supported Hi Folks, I have the following setup: MySQL 4.1.22 with database/schema DB2ADMIN (don't ask!) MySQL JDBC connector 5.1.12 OpenJPA-1.2.1 I have a simple native query: EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Query create = em.createNativeQuery("create table DB2ADMIN.PARENT (a int)"); create.executeUpdate(); em.getTransaction().commit(); The exception (callable statements not supported) is pasted below. This happens for any native query, not just one with a delete statement. The nativequery works fine with OpenJPA-2.0.0-beta with the same MySQL db and the same MySQL driver. Additionally, DB2 + OpenJPA-1.2.1 also works fine. So it's a combination of MySQL JDBC connector 5.1.12 + OpenJPA 1.2.1 that is behaving strangely. If I run a separate Java program that creates its own JDBC connection using the same MySQL driver, the CREATE TABLE and subsequent DELETE FROM statement work fine. So it's not a driver problem. Any suggestions on how to get the native query working ? (Aside: I saw a similar nativequery+delete issue [1] that resulted in OPENJPA-459. It has been fixed in trunk, and I tested that it works fine with the MySQL 5.1.12 driver. Unfortunately, I am in a production environment and cannot move to that release. I backported OPENJPA-459 (commit 835257) from trunk to OpenJPA-1.2.1 in my local workspace, but that did not fix the nativequery problem, so something else fixed it in trunk. OPENJPA-459 is probably not even related to this problem.) The testcase is pasted below. Thanks, Dinkar [1] http://n2.nabble.com/Native-DELETE-on-MySQL-td217583.html#a217583 Exception with OpenJPA-1.2.1: <openjpa-1.2.1-r752877:753278 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: Callable statements not supported. at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4232) at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4197) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64) at org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:237) at org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1039) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:809) at org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:884) at org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:880) at org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:565) at org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:339) at org.apache.openjpa.persistence.MySQLNativeTest.testNativeCreateTable(MySQLNativeTest.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.apache.openjpa.persistence.test.PersistenceTestCase.run(PersistenceTestCase.java:132) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.sql.SQLException: Callable statements not supported. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) at com.mysql.jdbc.ConnectionImpl.prepareCall(ConnectionImpl.java:4191) at com.mysql.jdbc.ConnectionImpl.prepareCall(ConnectionImpl.java:4139) at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareCall(DelegatingConnection.java:187) at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareCall(DelegatingConnection.java:185) at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareCall(DelegatingConnection.java:185) at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareCall(DelegatingConnection.java:174) at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareCall(SQLBuffer.java:570) at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareCall(SQLBuffer.java:550) at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareCall(SQLBuffer.java:539) at org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.prepareCall(SQLStoreQuery.java:335) at org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:227) ... 26 more Test Program: package org.apache.openjpa.persistence; import javax.persistence.EntityManager; import javax.persistence.Query; import org.apache.openjpa.persistence.test.SingleEMFTestCase; public class MySQLNativeTest extends SingleEMFTestCase { public void setUp() throws Exception { super.setUp(); } public void tearDown() throws Exception { super.tearDown(); } public void testNativeDelete() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Query create = em.createNativeQuery("delete from DB2ADMIN.PARENT)"); create.executeUpdate(); em.getTransaction().commit(); } public void testNativeCreateTable() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Query create = em.createNativeQuery("create table DB2ADMIN.PARENT (a int)"); create.executeUpdate(); em.getTransaction().commit(); } } -- View this message in context: http://n2.nabble.com/MySQL-4-1-22-Native-Query-Callable-statements-not-supported-tp4647741p4647741.html Sent from the OpenJPA Users mailing list archive at Nabble.com. CONFIDENTIALITY NOTICE: The information contained in this electronic mail (email) transmission (including attachments), is intended by MCLANE ADVANCED TECHNOLOGIES for the use of the named individual or entity to which it is addressed and may contain information that is privileged, confidential and/or protected as a trade secret. It is not intended for transmission to, or receipt by, any individual or entity other than the named addressee(s). If you have received this email in error, please delete it (including attachments) and any copies thereof without printing, copying or forwarding it, and notify the sender of the error by email reply immediately.
