| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| <appendix id="supported_databases"> |
| <title> |
| Supported Databases |
| </title> |
| <para> |
| Following is a table of the database and JDBC driver versions that are supported |
| by OpenJPA. |
| </para> |
| <table tocentry="1"> |
| <title> |
| Supported Databases and JDBC Drivers |
| </title> |
| <tgroup rowsep="1" colsep="1" align="left" cols="4"> |
| <colspec colname="dbname"/> |
| <colspec colname="dbversion"/> |
| <colspec colname="drivname"/> |
| <colspec colname="drivversion"/> |
| <thead> |
| <row> |
| <entry colname="dbname"> |
| Database Name |
| </entry> |
| <entry colname="dbversion"> |
| Database Version |
| </entry> |
| <entry colname="drivname"> |
| JDBC Driver Name |
| </entry> |
| <entry colname="drivversion"> |
| JDBC Driver Version |
| </entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry colname="dbname"> |
| Apache Derby |
| </entry> |
| <entry colname="dbversion"> |
| 10.1.2.1 |
| </entry> |
| <entry colname="drivname"> |
| Apache Derby Embedded JDBC Driver |
| </entry> |
| <entry colname="drivversion"> |
| 10.1.2.1 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Borland Interbase |
| </entry> |
| <entry colname="dbversion"> |
| 7.1.0.202 |
| </entry> |
| <entry colname="drivname"> |
| Interclient |
| </entry> |
| <entry colname="drivversion"> |
| 4.5.1 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Borland JDataStore |
| </entry> |
| <entry colname="dbversion"> |
| 6.0 |
| </entry> |
| <entry colname="drivname"> |
| Borland JDataStore |
| </entry> |
| <entry colname="drivversion"> |
| 6.0 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| DB2 |
| </entry> |
| <entry colname="dbversion"> |
| 8.1 |
| </entry> |
| <entry colname="drivname"> |
| IBM DB2 JDBC Universal Driver |
| </entry> |
| <entry colname="drivversion"> |
| 1.0.581 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Empress |
| </entry> |
| <entry colname="dbversion"> |
| 8.62 |
| </entry> |
| <entry colname="drivname"> |
| Empress Category 2 JDBC Driver |
| </entry> |
| <entry colname="drivversion"> |
| 8.62 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Firebird |
| </entry> |
| <entry colname="dbversion"> |
| 1.5 |
| </entry> |
| <entry colname="drivname"> |
| JayBird JCA/JDBC driver |
| </entry> |
| <entry colname="drivversion"> |
| 1.0.1 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| H2 Database Engine |
| </entry> |
| <entry colname="dbversion"> |
| 1.0 |
| </entry> |
| <entry colname="drivname"> |
| H2 |
| </entry> |
| <entry colname="drivversion"> |
| 1.0 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Hypersonic Database Engine |
| </entry> |
| <entry colname="dbversion"> |
| 1.8.0 |
| </entry> |
| <entry colname="drivname"> |
| Hypersonic |
| </entry> |
| <entry colname="drivversion"> |
| 1.8.0 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Informix Dynamic Server |
| </entry> |
| <entry colname="dbversion"> |
| 9.30.UC10 |
| </entry> |
| <entry colname="drivname"> |
| Informix JDBC driver |
| </entry> |
| <entry colname="drivversion"> |
| 2.21.JC2 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| InterSystems Cache |
| </entry> |
| <entry colname="dbversion"> |
| 5.0 |
| </entry> |
| <entry colname="drivname"> |
| Cache JDBC Driver |
| </entry> |
| <entry colname="drivversion"> |
| 5.0 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Microsoft Access |
| </entry> |
| <entry colname="dbversion"> |
| 9.0 (a.k.a. "2000") |
| </entry> |
| <entry colname="drivname"> |
| DataDirect SequeLink |
| </entry> |
| <entry colname="drivversion"> |
| 5.4.0038 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Microsoft SQL Server |
| </entry> |
| <entry colname="dbversion"> |
| 9.00.1399 (SQL Server 2005) |
| </entry> |
| <entry colname="drivname"> |
| SQLServer |
| </entry> |
| <entry colname="drivversion"> |
| 1.0.809.102 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Microsoft Visual FoxPro |
| </entry> |
| <entry colname="dbversion"> |
| 7.0 |
| </entry> |
| <entry colname="drivname"> |
| DataDirect SequeLink |
| </entry> |
| <entry colname="drivversion"> |
| 5.4.0038 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| MySQL |
| </entry> |
| <entry colname="dbversion"> |
| 3.23.43-log |
| </entry> |
| <entry colname="drivname"> |
| MySQL Driver |
| </entry> |
| <entry colname="drivversion"> |
| 3.0.14 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| MySQL |
| </entry> |
| <entry colname="dbversion"> |
| 5.0.26 |
| </entry> |
| <entry colname="drivname"> |
| MySQL Driver |
| </entry> |
| <entry colname="drivversion"> |
| 3.0.14 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Oracle |
| </entry> |
| <entry colname="dbversion"> |
| 8.1,9.2,10.1 |
| </entry> |
| <entry colname="drivname"> |
| Oracle JDBC driver |
| </entry> |
| <entry colname="drivversion"> |
| 10.2.0.1.0 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Pointbase |
| </entry> |
| <entry colname="dbversion"> |
| 4.4 |
| </entry> |
| <entry colname="drivname"> |
| Pointbase JDBC driver |
| </entry> |
| <entry colname="drivversion"> |
| 4.4 (4.4) |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| PostgreSQL |
| </entry> |
| <entry colname="dbversion"> |
| 7.2.1 |
| </entry> |
| <entry colname="drivname"> |
| PostgreSQL Native Driver |
| </entry> |
| <entry colname="drivversion"> |
| 8.1 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| PostgreSQL |
| </entry> |
| <entry colname="dbversion"> |
| 8.1.5 |
| </entry> |
| <entry colname="drivname"> |
| PostgreSQL Native Driver |
| </entry> |
| <entry colname="drivversion"> |
| 8.1 |
| </entry> |
| </row> |
| <row> |
| <entry colname="dbname"> |
| Sybase Adaptive Server Enterprise |
| </entry> |
| <entry colname="dbversion"> |
| 12.5 |
| </entry> |
| <entry colname="drivname"> |
| jConnect |
| </entry> |
| <entry colname="drivversion"> |
| 5.5 (5.5) |
| </entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| <section id="dbsupport_derby"> |
| <title> |
| Apache Derby |
| </title> |
| <example id="example_props_derby"> |
| <title> |
| Example properties for Derby |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: org.apache.derby.jdbc.EmbeddedDriver |
| openjpa.ConnectionURL: jdbc:derby:DB_NAME;create=true |
| </programlisting> |
| </example> |
| </section> |
| <section id="dbsupport_interbase"> |
| <title> |
| Borland Interbase |
| </title> |
| <example id="example_props_interbase"> |
| <title> |
| Example properties for Interbase |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: interbase.interclient.Driver |
| openjpa.ConnectionURL: jdbc:interbase://SERVER_NAME:SERVER_PORT/DB_PATH |
| </programlisting> |
| </example> |
| <section id="dbsupport_interbase_issues"> |
| <title> |
| Known issues with Interbase |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Interbase does not support record locking, so |
| datastore transactions cannot use the pessimistic lock manager. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Interbase does not support the <literal>LOWER</literal>, <literal>SUBSTRING |
| </literal>, or <literal>INSTR</literal> SQL functions> |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_jdatastore"> |
| <title> |
| JDataStore |
| </title> |
| <example id="example_props_jdatastore"> |
| <title> |
| Example properties for JDataStore |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.borland.datastore.jdbc.DataStoreDriver |
| openjpa.ConnectionURL: jdbc:borland:dslocal:db-jdatastore.jds;create=true |
| </programlisting> |
| </example> |
| </section> |
| <section id="dbsupport_db2"> |
| <title> |
| IBM DB2 |
| </title> |
| <example id="example_props_db2"> |
| <title> |
| Example properties for IBM DB2 |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.ibm.db2.jcc.DB2Driver |
| openjpa.ConnectionURL: jdbc:db2://SERVER_NAME:SERVER_PORT/DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_db2_issues"> |
| <title> |
| Known issues with DB2 |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Floats and doubles may lose precision when stored. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Empty char values are stored as NULL. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Fields of type BLOB and CLOB are limited to 1M. This number can be increased by |
| extending <classname>DB2Dictionary</classname>. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_empress"> |
| <title> |
| Empress |
| </title> |
| <example id="example_props_empress"> |
| <title> |
| Example properties for Empress |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: empress.jdbc.empressDriver |
| openjpa.ConnectionURL: jdbc:empress://SERVER=yourserver;PORT=6322;DATABASE=yourdb |
| </programlisting> |
| </example> |
| <section id="dbsupport_empress_issues"> |
| <title> |
| Known issues with Empress |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Empress enforces pessimistic semantics (lock on |
| read) when not using <literal>AllowConcurrentRead</literal> property (which |
| bypasses row locking) for <classname>EmpressDictionary</classname>. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Only the category 2 non-local driver is supported. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_h2"> |
| <title> |
| H2 Database Engine |
| </title> |
| <example id="example_props_h2"> |
| <title> |
| Example properties for H2 Database Engine |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: org.h2.Driver |
| openjpa.ConnectionURL: jdbc:h2:DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_h2_issues"> |
| <title> |
| Known issues with H2 Database Engine |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| H2 does not support cross joins |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_hypersonic"> |
| <title> |
| Hypersonic |
| </title> |
| <example id="example_props_hypersonic"> |
| <title> |
| Example properties for Hypersonic |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: org.hsqldb.jdbcDriver |
| openjpa.ConnectionURL: jdbc:hsqldb:DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_hypersonic_issues"> |
| <title> |
| Known issues with Hypersonic |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Hypersonic does not support pessimistic locking, so non-optimistic transactions |
| will fail unless the <literal>SimulateLocking</literal> property is set for the |
| <link linkend="openjpa.jdbc.DBDictionary"> openjpa.jdbc.DBDictionary</link> |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_firebird"> |
| <title> |
| Firebird |
| </title> |
| <example id="example_props_firebird"> |
| <title> |
| Example properties for Firebird |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: org.firebirdsql.jdbc.FBDriver |
| openjpa.ConnectionURL: jdbc:firebirdsql://SERVER_NAME:SERVER_PORT/DB_PATH |
| </programlisting> |
| </example> |
| <section id="dbsupport_firebird_issues"> |
| <title> |
| Known issues with Firebird |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Firebird does not support auto-increment columns. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Firebird does not support the <literal>LOWER</literal>, <literal>SUBSTRING |
| </literal>, or <literal>INSTR</literal> SQL functions. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_informix"> |
| <title> |
| Informix |
| </title> |
| <example id="example_props_informix"> |
| <title> |
| Example properties for Informix Dynamic Server |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.informix.jdbc.IfxDriver |
| openjpa.ConnectionURL: \ |
| jdbc:informix-sqli://SERVER_NAME:SERVER_PORT/DB_NAME:INFORMIXSERVER=SERVER_ID |
| </programlisting> |
| </example> |
| <section id="dbsupport_informix_issues"> |
| <title> |
| Known issues with Informix |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| None |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_intersystems_cache"> |
| <title> |
| InterSystems Cache |
| </title> |
| <example id="example_props_intersystems_cache"> |
| <title> |
| Example properties for InterSystems Cache |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.intersys.jdbc.CacheDriver |
| openjpa.ConnectionURL: jdbc:Cache://SERVER_NAME:SERVER_PORT/DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_intersystems_cache_issues"> |
| <title> |
| Known issues with InterSystems Cache |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Support for Cache is done via SQL access over JDBC, not through their object |
| database APIs. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_access"> |
| <title> |
| Microsoft Access |
| </title> |
| <example id="example_props_access"> |
| <title> |
| Example properties for Microsoft Access |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.ddtek.jdbc.sequelink.SequeLinkDriver |
| openjpa.ConnectionURL: jdbc:sequelink://SERVER_NAME:SERVER_PORT |
| </programlisting> |
| </example> |
| <section id="dbsupport_access_issues"> |
| <title> |
| Known issues with Microsoft Access |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Using the Sun JDBC-ODBC bridge to connect is not supported. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_sqlserver"> |
| <title> |
| Microsoft SQL Server |
| </title> |
| <example id="example_props_sqlserver"> |
| <title> |
| Example properties for Microsoft SQLServer |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver |
| openjpa.ConnectionURL: \ |
| jdbc:sqlserver://SERVER_NAME:1433;DatabaseName=DB_NAME;selectMethod=cursor;sendStringParametersAsUnicode=false |
| </programlisting> |
| </example> |
| <section id="dbsupport_sqlserver_issues"> |
| <title> |
| Known issues with SQL Server |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| SQL Server date fields are accurate only to the nearest 3 milliseconds, |
| possibly resulting in precision loss in stored dates. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| The ConnectionURL must always contain the " <literal>selectMethod=cursor |
| </literal> " string. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Adding <literal>sendStringParametersAsUnicode=false</literal> to the |
| ConnectionURL may significantly increase performance. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| The Microsoft SQL Server driver only emulates batch updates. The DataDirect JDBC |
| driver has true support for batch updates, and may result in a significant |
| performance gain. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Floats and doubles may lose precision when stored. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <literal>TEXT</literal> columns cannot be used in queries. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| When using a SQL Server instance that has been configured to be case-sensitive |
| in schema names, you need to set the "schemaCase=preserve" parameter in the |
| <link linkend="openjpa.jdbc.DBDictionary">openjpa.jdbc.DBDictionary</link> |
| property. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_foxpro"> |
| <title> |
| Microsoft FoxPro |
| </title> |
| <example id="example_props_foxpro"> |
| <title> |
| Example properties for Microsoft FoxPro |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.ddtek.jdbc.sequelink.SequeLinkDriver |
| openjpa.ConnectionURL: jdbc:sequelink://SERVER_NAME:SERVER_PORT |
| </programlisting> |
| </example> |
| <section id="dbsupport_foxpro_issues"> |
| <title> |
| Known issues with Microsoft FoxPro |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Using the Sun JDBC-ODBC bridge to connect is not supported. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_mysql"> |
| <title> |
| MySQL |
| </title> |
| <example id="example_props_mysql"> |
| <title> |
| Example properties for MySQL |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.mysql.jdbc.Driver |
| openjpa.ConnectionURL: jdbc:mysql://SERVER_NAME/DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_mysql_issues"> |
| <title> |
| Known issues with MySQL |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| The default table types that MySQL uses do not support transactions, which will |
| prevent OpenJPA from being able to roll back transactions. Use the |
| <literal>InnoDB</literal> table type for any tables that OpenJPA will access. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| MySQL does not support sub-selects in versions prior to 4.1, and are disabled by |
| default. Some operations (such as the <function>isEmpty()</function> method in a |
| query) will fail due to this. If you are using MySQL 4.1 or later, you can lift |
| this restriction by setting the <literal>SupportsSubselect=true</literal> |
| parameter of the <link linkend="openjpa.jdbc.DBDictionary"> |
| openjpa.jdbc.DBDictionary</link> property. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Rollback due to database error or optimistic lock violation is not supported |
| unless the table type is one of the MySQL transactional types. Explicit calls to |
| <function>rollback()</function> before a transaction has been committed, |
| however, are always supported. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Floats and doubles may lose precision when stored in some datastores. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| When storing a field of type <classname>java.math.BigDecimal</classname>, some |
| datastores will add extraneous trailing 0 characters, causing an equality |
| mismatch between the field that is stored and the field that is retrieved. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Some version of the MySQL JDBC driver have a bug that prevents OpenJPA from |
| being able to interrogate the database for foreign keys. Version 3.0.14 (or |
| higher) of the MySQL driver is required in order to get around this bug. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_oracle"> |
| <title> |
| Oracle |
| </title> |
| <example id="example_props_oracle"> |
| <title> |
| Example properties for Oracle |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: oracle.jdbc.driver.OracleDriver |
| openjpa.ConnectionURL: jdbc:oracle:thin:@SERVER_NAME:1521:DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_oracle_query_hints"> |
| <title> |
| Using Query Hints with Oracle |
| </title> |
| <para> |
| Oracle has support for "query hints", which are formatted comments embedded in |
| SQL that provide some hint for how the query should be executed. These hints are |
| usually designed to provide suggestions to the Oracle query optimizer for how to |
| efficiently perform a certainly query, and aren't typically needed for any but |
| the most intensive queries. |
| </para> |
| <example id="dbsupport_oracle_query_hints_ex"> |
| <title> |
| Using Oracle Hints |
| </title> |
| <programlisting> |
| Query query = em.createQuery(...); |
| query.setHint("openjpa.hint.OracleSelectHint", "/*+ first_rows(100) */"); |
| List results = query.getResultList(); |
| </programlisting> |
| </example> |
| </section> |
| <section id="dbsupport_oracle_issues"> |
| <title> |
| Known issues with Oracle |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| The Oracle JDBC driver has significant differences between different versions. |
| It is important to use the officially supported version of the driver |
| (10.2.0.1.0), which is backward compatible with previous versions of the Oracle |
| server. It can be downloaded from |
| <ulink url="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101040.html"> |
| http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101040.html</ulink>. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| For VARCHAR fields, <literal>null</literal> and a blank string are equivalent. |
| This means that an object that stores a null string field will have it get read |
| back as a blank string. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Oracle corp's JDBC driver for Oracle has only limited support for batch updates. |
| The result for OpenJPA is that in some cases, the exact object that failed an |
| optimistic lock check cannot be determined, and OpenJPA will throw an |
| <classname>OptimisticVerificationException</classname> with more failed objects |
| than actually failed. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Oracle cannot store numbers with more than 38 digits in numeric columns. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Floats and doubles may lose precision when stored. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| CLOB columns cannot be used in queries. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_pointbase"> |
| <title> |
| Pointbase |
| </title> |
| <example id="example_props_pointbase"> |
| <title> |
| Example properties for Pointbase |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.pointbase.jdbc.jdbcUniversalDriver |
| openjpa.ConnectionURL: \ |
| jdbc:pointbase:DB_NAME,database.home=pointbasedb,create=true,cache.size=10000,database.pagesize=30720 |
| </programlisting> |
| </example> |
| <section id="dbsupport_pointbase_issues"> |
| <title> |
| Known issues with Pointbase |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Fields of type BLOB and CLOB are limited to 1M. Set the <literal>BlobTypeName |
| </literal> and/or <literal>ClobTypeName</literal> properties of the |
| <literal>openjpa.jdbc.DBDictionary</literal> setting to override. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_postgresql"> |
| <title> |
| PostgreSQL |
| </title> |
| <example id="example_props_postgresql"> |
| <title> |
| Example properties for PostgreSQL |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: org.postgresql.Driver |
| openjpa.ConnectionURL: jdbc:postgresql://SERVER_NAME:5432/DB_NAME |
| </programlisting> |
| </example> |
| <section id="dbsupport_postgresql_issues"> |
| <title> |
| Known issues with PostgreSQL |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| Floats and doubles may lose precision when stored. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| PostgreSQL cannot store very low and very high dates. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Empty string/char values are stored as NULL. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| <section id="dbsupport_sybase"> |
| <title> |
| Sybase Adaptive Server |
| </title> |
| <example id="example_props_sybase"> |
| <title> |
| Example properties for Sybase |
| </title> |
| <programlisting> |
| openjpa.ConnectionDriverName: com.sybase.jdbc2.jdbc.SybDriver |
| openjpa.ConnectionURL: \ |
| jdbc:sybase:Tds:SERVER_NAME:4100/DB_NAME?ServiceName=DB_NAME&BE_AS_JDBC_COMPLIANT_AS_POSSIBLE=true |
| </programlisting> |
| </example> |
| <section id="dbsupport_sybase_issues"> |
| <title> |
| Known issues with Sybase |
| </title> |
| <itemizedlist> |
| <listitem> |
| <para> |
| The "<literal>DYNAMIC_PREPARE</literal>" parameter of the Sybase JDBC driver |
| cannot be used with OpenJPA. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Datastore locking cannot be used when manipulating many-to-many relations using |
| the default OpenJPA schema created by the schematool, unless an auto-increment |
| primary key field is manually added to the table. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| Persisting a zero-length string results in a string with a single space |
| characted being returned from Sybase, Inc.'s JDBC driver. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| The <literal>BE_AS_JDBC_COMPLIANT_AS_POSSIBLE</literal> is required in order to |
| use datastore (pessimistic) locking. Failure to set this property may lead to |
| obscure errors like " <literal>FOR UPDATE can not be used in a SELECT which is |
| not part of the declaration of a cursor or which is not inside a stored |
| procedure.</literal> ". |
| </para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| </section> |
| </appendix> |