openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject schemaName not valued with MySQL
Date Sun, 30 Nov 2008 19:21:04 GMT


I have a small application which uses JPA and MS SQL Server.  It works on that platform but
I am having a problem when using MySQL for the database.  I get an error trying to resolve
metadata.  I stepped thru the JPA code and found out that the problem occurs because the schemaName
is not being returned from the SHOW FULL COLUMNS which is called to get all the columns for
the table.  When the new Column object is created - it has no shemaName.  JPA wants to use
this schemaName for hashmaps for schemaGroups, etc.  Later, when it tries to resolve each
table/column with the correct schema name (which I guess it is getting from orm.xml) it can’t
find it.  I get an error saying the table does not exist (even though it was clearly accessing
the table and it’s columns from the database).  

I was able to work around this by sub-classing MySQLDictionary and overriding the newColumn(ResultSet
meta) method.  I invoke super.newColumn(meta) and if the column returned doesn’t have a schemaName
(which it never does), then I hard-code my value.  Obviously this shouldn’t be necessary and
I must not have something configured correctly – but it seems I should have a better error
message.  Is this a JPA bug?  

I am using the following properties : 

        <property name="openjpa.Optimistic" value="true" />
        <property name="openjpa.NontransactionalRead" value="true" />
        <property name="openjpa.NontransactionalWrite" value="false" />
        <!--property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.MySQLDictionary"
        <property name="openjpa.jdbc.DBDictionary" value="com.siemens.soarian.eld.entity.KensMySQLDictionary"
  <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/eld" />
        <property name="openjpa.ConnectionUserName" value="Smsapps" />
        <property name="openjpa.ConnectionPassword" value="Smspass1!" />
        <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
        <property name="openjpa.ConnectionProperties" value="sendStringParametersAsUnicode=false,InsensitiveResultSetBufferSize=-1,QueryTimeout=10"
        <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72,
QueryTimeout=10, TrackParameters=true, WarningAction=none, MaxCachedStatements=0" />
        <property name="openjpa.ConnectionFactoryMode" value="local" />
        <property name="openjpa.ConnectionRetainMode" value="transaction" />
        <property name="openjpa.DataCache" value="false" />
        <property name="openjpa.QueryCache" value="false" />
        <property name="openjpa.RemoteCommitProvider" value="sjvm" />
        <property name="openjpa.FlushBeforeQueries" value="true" />
        <property name="openjpa.IgnoreChanges" value="true" />
        <property name="openjpa.RetainState" value="true" />
        <property name="openjpa.RestoreState" value="true" />
        <property name="openjpa.jdbc.SubclassFetchMode" value="join" />
        <!-- Need to check this next one - OpenJPA does not define any values yet -->
        <property name="openjpa.Compatibility" value="ValidateFalseReturnsHollow=false,ValidateTrueChecksStore=true"
        <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)" />
        <property name="openjpa.jdbc.Schema" value="dbo"/>
        <property name="openjpa.TransactionMode" value="managed" />
        <property name="openjpa.ManagedRuntime"
        <property name="openjpa.Log" value="DefaultLevel=TRACE, SQL=TRACE, Runtime=TRACE,
Query=TRACE, MetaData=TRACE, Tool=INFO" />

Ken Swanson

View raw message