blob: bb085e1d9345c3d700b183e33abd2bab245009df [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>4.&nbsp; Database Support</title><link rel="stylesheet" href="css/docbook.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="manual.html" title="Apache OpenJPA User's Guide"><link rel="up" href="ref_guide_dbsetup.html" title="Chapter&nbsp;4.&nbsp; JDBC"><link rel="prev" href="ref_guide_dbsetup_sqlconn.html" title="3.&nbsp; Runtime Access to DataSource"><link rel="next" href="ref_guide_dbsetup_isolation.html" title="5.&nbsp; Setting the Transaction Isolation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.&nbsp;
Database Support
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ref_guide_dbsetup_sqlconn.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp;
JDBC
</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ref_guide_dbsetup_isolation.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ref_guide_dbsetup_dbsupport"></a>4.&nbsp;
Database Support
</h2></div></div></div><div class="toc"><dl><dt><span class="section"><a href="ref_guide_dbsetup_dbsupport.html#ref_guide_dbsetup_dbdictprops">4.1.
DBDictionary Properties
</a></span></dt><dt><span class="section"><a href="ref_guide_dbsetup_dbsupport.html#ref_guide_dbsetup_dbsupport_mysql">4.2.
MySQLDictionary Properties
</a></span></dt><dt><span class="section"><a href="ref_guide_dbsetup_dbsupport.html#ref_guide_dbsetup_dbsupport_oracle">4.3.
OracleDictionary Properties
</a></span></dt></dl></div><a class="indexterm" name="d0e17411"></a><a class="indexterm" name="d0e17414"></a><p>
OpenJPA can take advantage of any JDBC 2.x compliant
driver, making almost any major database a candidate for use. See our officially
supported database list in <a href="supported_databases.html" title="Appendix&nbsp;2.&nbsp; Supported Databases">Appendix&nbsp;2, <i xmlns:xlink="http://www.w3.org/1999/xlink">
Supported Databases
</i></a> for more
information. Typically, OpenJPA auto-configures its JDBC behavior and SQL
dialect for your database, based on the values of your connection-related
configuration properties.
</p><p>
If OpenJPA cannot detect what type of database you are using, or if you are
using an unsupported database, you will have to tell OpenJPA what
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/DBDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.DBDictionary</code></a> to use.
The <code class="classname">DBDictionary</code> abstracts away the differences between
databases. You can plug a dictionary into OpenJPA using the
<a href="ref_guide_conf_jdbc.html#openjpa.jdbc.DBDictionary" title="6.2.&nbsp; openjpa.jdbc.DBDictionary"><code class="literal">openjpa.jdbc.DBDictionary
</code></a> configuration property. The built-in dictionaries are listed
below. If you are using an unsupported database, you may have to write your own
<code class="classname">DBDictionary</code> subclass, a simple process.
</p><div class="itemizedlist"><ul type="disc"><li><p>
<a class="indexterm" name="d0e17446"></a>
<code class="literal">access</code>: Dictionary for Microsoft Access. This is an alias
for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/AccessDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.AccessDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17461"></a>
<code class="literal">db2</code>: Dictionary for IBM's DB2 database. This is an alias for
the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/DB2Dictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.DB2Dictionary</code></a> class.
</p></li><li><p>
<a class="indexterm" name="d0e17476"></a>
<code class="literal">derby</code>: Dictionary for the Apache Derby database. This is an
alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/DerbyDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.DerbyDictionary</code> class.
</a>
</p></li><li><p>
<a class="indexterm" name="d0e17492"></a>
<code class="literal">empress</code>: Dictionary for Empress database This is an alias
for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/EmpressDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.EmpressDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17507"></a>
<code class="literal">foxpro</code>: Dictionary for Microsoft Visual FoxPro. This is an
alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/FoxProDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.FoxProDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17522"></a>
<code class="literal">hsql</code>: Dictionary for the Hypersonic SQL database. This is an
alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/HSQLDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.HSQLDictionary</code></a> class.
</p></li><li><p>
<a class="indexterm" name="d0e17537"></a>
<code class="literal">informix</code>: Dictionary for the Informix database. This is an
alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/InformixDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.InformixDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17552"></a>
<code class="literal">jdatastore</code>: Dictionary for Borland JDataStore. This is an
alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/JDataStoreDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.JDataStoreDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17567"></a>
<code class="literal">mysql</code>: Dictionary for the MySQL database. This is an alias
for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/MySQLDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.MySQLDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17582"></a>
<code class="literal">oracle</code>: Dictionary for Oracle. This is an alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/OracleDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.OracleDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17597"></a>
<code class="literal">pointbase</code>: Dictionary for Pointbase Embedded database. This
is an alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/PointbaseDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.PointbaseDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17612"></a>
<code class="literal">postgres</code>: Dictionary for PostgreSQL. This is an alias for
the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/PostgresDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.PostgresDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17627"></a>
<code class="literal">sqlserver</code>: Dictionary for Microsoft's SQLServer database.
This is an alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/SQLServerDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.SQLServerDictionary</code></a>
class.
</p></li><li><p>
<a class="indexterm" name="d0e17642"></a>
<code class="literal">sybase</code>: Dictionary for Sybase. This is an alias for the
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="../javadoc/org/apache/openjpa/jdbc/sql/SybaseDictionary.html" target="_top">
<code class="classname">org.apache.openjpa.jdbc.sql.SybaseDictionary</code></a>
class.
</p></li></ul></div><p>
The example below demonstrates how to set a dictionary and configure its
properties in your configuration file. The <code class="literal">DBDictionary</code>
property uses OpenJPA's <a href="ref_guide_conf_plugins.html" title="4.&nbsp; Plugin Configuration">plugin syntax
</a>.
</p><div class="example"><a name="ref_guide_dbsetup_dbdict"></a><p class="title"><b>Example&nbsp;4.6.&nbsp;
Specifying a DBDictionary
</b></p><div class="example-contents"><pre class="programlisting">
&lt;property name="openjpa.jdbc.DBDictionary" value="hsql(SimulateLocking=true)"/&gt;
</pre></div></div><br class="example-break"><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ref_guide_dbsetup_dbdictprops"></a>4.1.&nbsp;
DBDictionary Properties
</h3></div></div></div><p>
The standard dictionaries all recognize the following properties. These
properties will usually not need to be overridden, since the dictionary
implementation should use the appropriate default values for your database. You
typically won't use these properties unless you are designing your own
<code class="classname">DBDictionary</code> for an unsupported database.
</p><div class="itemizedlist"><ul type="disc"><li><p><a name="DBDictionary.DriverVendor"></a>
<a class="indexterm" name="d0e17679"></a>
<code class="literal">DriverVendor</code>: The vendor of the particular JDBC driver you
are using. Some dictionaries must alter their behavior depending on the driver
vendor. See the <code class="literal">VENDOR_XXX</code> constants defined in your
dictionary's Javadoc for available options.
</p></li><li><p><a name="DBDictionary.CatalogSeparator"></a>
<a class="indexterm" name="d0e17694"></a>
<code class="literal">CatalogSeparator</code>: The string the database uses to delimit
between the schema name and the table name. This is typically <code class="literal">"."
</code>, which is the default.
</p></li><li><p><a name="DBDictionary.CreatePrimaryKeys"></a>
<a class="indexterm" name="d0e17709"></a>
<code class="literal">CreatePrimaryKeys</code>: If <code class="literal">false</code>, then do not
create database primary keys for identifiers. Defaults to <code class="literal">true
</code>.
</p></li><li><p><a name="DBDictionary.ConstraintNameMode"></a>
<a class="indexterm" name="d0e17727"></a>
<code class="literal">ConstraintNameMode</code>: When creating constraints, whether to
put the constraint name before the definition (<code class="literal">before</code>),
just after the constraint type name (<code class="literal">mid</code>), or after the
constraint definition (<code class="literal">after</code>). Defaults to <code class="literal">before
</code>.
</p></li><li><p><a name="DBDictionary.MaxTableNameLength"></a>
<a class="indexterm" name="d0e17751"></a>
<code class="literal">MaxTableNameLength</code>: The maximum number of characters in a
table name. Defaults to 128.
</p></li><li><p><a name="DBDictionary.MaxColumnNameLength"></a>
<a class="indexterm" name="d0e17763"></a>
<code class="literal">MaxColumnNameLength</code>: The maximum number of characters in a
column name. Defaults to 128.
</p></li><li><p><a name="DBDictionary.MaxConstraintNameLength"></a>
<a class="indexterm" name="d0e17775"></a>
<code class="literal">MaxConstraintNameLength</code>: The maximum number of characters in
a constraint name. Defaults to 128.
</p></li><li><p><a name="DBDictionary.MaxIndexNameLength"></a>
<a class="indexterm" name="d0e17787"></a>
<a class="indexterm" name="d0e17793"></a>
<code class="literal">MaxIndexNameLength</code>: The maximum number of characters in an
index name. Defaults to 128.
</p></li><li><p><a name="DBDictionary.MaxAutoAssignNameLength"></a>
<a class="indexterm" name="d0e17805"></a>
<code class="literal">MaxAutoAssignNameLength</code>: Set this property to the maximum
length of name for sequences used for auto-increment columns. Names longer than
this value are truncated. Defaults to <code class="literal">31</code>.
</p></li><li><p><a name="DBDictionary.MaxIndexesPerTable"></a>
<a class="indexterm" name="d0e17820"></a>
<code class="literal">MaxIndexesPerTable</code>: The maximum number of indexes that can
be placed on a single table. Defaults to no limit.
</p></li><li><p><a name="DBDictionary.SupportsForeignKeys"></a>
<a class="indexterm" name="d0e17832"></a>
<code class="literal">SupportsForeignKeys</code>: Whether the database supports foreign
keys. Defaults to true.
</p></li><li><p><a name="DBDictionary.SupportsTimestampNanos"></a>
<a class="indexterm" name="d0e17844"></a>
<code class="literal">SupportsTimestampNanos</code>: Whether the database supports nanoseconds with TIMESTAMP columns. Defaults to true.
</p></li><li><p><a name="DBDictionary.SupportsUniqueConstraints"></a>
<a class="indexterm" name="d0e17854"></a>
<code class="literal">SupportsUniqueConstraints</code>: Whether the database supports
unique constraints. Defaults to true.
</p></li><li><p><a name="DBDictionary.SupportsDeferredConstraints"></a>
<a class="indexterm" name="d0e17866"></a>
<code class="literal">SupportsDeferredConstraints</code>: Whether the database supports
deferred constraints. Defaults to true.
</p></li><li><p><a name="DBDictionary.SupportsRestrictDeleteAction"></a>
<a class="indexterm" name="d0e17878"></a>
<code class="literal">SupportsRestrictDeleteAction</code>: Whether the database supports
the RESTRICT foreign key delete action. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.SupportsCascadeDeleteAction"></a>
<a class="indexterm" name="d0e17893"></a>
<code class="literal">SupportsCascadeDeleteAction</code>: Whether the database supports
the CASCADE foreign key delete action. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.SupportsNullDeleteAction"></a>
<a class="indexterm" name="d0e17908"></a>
<code class="literal">SupportsNullDeleteAction</code>: Whether the database supports the
SET NULL foreign key delete action. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.SupportsDefaultDeleteAction"></a>
<a class="indexterm" name="d0e17923"></a>
<code class="literal">SupportsDefaultDeleteAction</code>: Whether the database supports
the SET DEFAULT foreign key delete action. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.SupportsAlterTableWithAddColumn"></a>
<a class="indexterm" name="d0e17938"></a>
<code class="literal">SupportsAlterTableWithAddColumn</code>: Whether the database
supports adding a new column in an ALTER TABLE statement. Defaults to <code class="literal">
true</code>.
</p></li><li><p><a name="DBDictionary.SupportsAlterTableWithDropColumn"></a>
<a class="indexterm" name="d0e17953"></a>
<code class="literal">SupportsAlterTableWithDropColumn</code>: Whether the database
supports dropping a column in an ALTER TABLE statement. Defaults to <code class="literal">
true</code>.
</p></li><li><p><a name="DBDictionary.ReservedWords"></a>
<a class="indexterm" name="d0e17968"></a>
<code class="literal">ReservedWords</code>: A comma-separated list of reserved words for
this database, beyond the standard SQL92 keywords.
</p></li><li><p><a name="DBDictionary.SystemTables"></a>
<a class="indexterm" name="d0e17980"></a>
<code class="literal">SystemTables</code>: A comma-separated list of table names that
should be ignored.
</p></li><li><p><a name="DBDictionary.SystemSchemas"></a>
<a class="indexterm" name="d0e17994"></a>
<code class="literal">SystemSchemas</code>: A comma-separated list of schema names that
should be ignored.
</p></li><li><p><a name="DBDictionary.SchemaCase"></a>
<a class="indexterm" name="d0e18008"></a>
<code class="literal">SchemaCase</code>: The case to use when querying the database
metadata about schema components. Defaults to making all names upper case.
Available values are: <code class="literal">upper, lower, preserve</code>.
</p></li><li><p><a name="DBDictionary.ValidationSQL"></a>
<a class="indexterm" name="d0e18025"></a>
<a class="indexterm" name="d0e18031"></a>
<code class="literal">ValidationSQL</code>: The SQL used to validate that a connection is
still in a valid state. For example, " <code class="literal">SELECT SYSDATE FROM DUAL
</code> " for Oracle.
</p></li><li><p><a name="DBDictionary.InitializationSQL"></a>
<a class="indexterm" name="d0e18046"></a>
<a class="indexterm" name="d0e18052"></a>
<code class="literal">InitializationSQL</code>: A piece of SQL to issue against the
database whenever a connection is retrieved from the <code class="classname">DataSource
</code>.
</p></li><li><p><a name="DBDictionary.JoinSyntax"></a>
<a class="indexterm" name="d0e18067"></a>
<code class="literal">JoinSyntax</code>: The SQL join syntax to use in select statements.
See <a href="ref_guide_dbsetup_sql92.html" title="6.&nbsp; Setting the SQL Join Syntax">Section&nbsp;6, &#8220;
Setting the SQL Join Syntax
&#8221;</a>.
</p></li><li><p><a name="DBDictionary.CrossJoinClause"></a>
<a class="indexterm" name="d0e18081"></a>
<code class="literal">CrossJoinClause</code>: The clause to use for a cross join
(cartesian product). Defaults to <code class="literal">CROSS JOIN</code>.
</p></li><li><p><a name="DBDictionary.InnerJoinClause"></a>
<a class="indexterm" name="d0e18096"></a>
<code class="literal">InnerJoinClause</code>: The clause to use for an inner join.
Defaults to <code class="literal">INNER JOIN</code>.
</p></li><li><p><a name="DBDictionary.OuterJoinClause"></a>
<a class="indexterm" name="d0e18111"></a>
<code class="literal">OuterJoinClause</code>: The clause to use for an left outer join.
Defaults to <code class="literal">LEFT OUTER JOIN</code>.
</p></li><li><p><a name="DBDictionary.RequiresConditionForCrossJoin"></a>
<a class="indexterm" name="d0e18126"></a>
<code class="literal">RequiresConditionForCrossJoin</code>: Some databases require that
there always be a conditional statement for a cross join. If set, this parameter
ensures that there will always be some condition to the join clause.
</p></li><li><p><a name="DBDictionary.ToUpperCaseFunction"></a>
<a class="indexterm" name="d0e18138"></a>
<code class="literal">ToUpperCaseFunction</code>: SQL function call for for converting a
string to upper case. Use the token <code class="literal">{0}</code> to represent the
argument.
</p></li><li><p><a name="DBDictionary.ToLowerCaseFunction"></a>
<a class="indexterm" name="d0e18153"></a>
<code class="literal">ToLowerCaseFunction</code>: Name of the SQL function for converting
a string to lower case. Use the token <code class="literal">{0}</code> to represent the
argument.
</p></li><li><p><a name="DBDictionary.StringLengthFunction"></a>
<a class="indexterm" name="d0e18168"></a>
<code class="literal">StringLengthFunction</code>: Name of the SQL function for getting
the length of a string. Use the token <code class="literal">{0}</code> to represent the
argument.
</p></li><li><p><a name="DBDictionary.SubstringFunctionName"></a>
<a class="indexterm" name="d0e18183"></a>
<code class="literal">SubstringFunctionName</code>: Name of the SQL function for getting
the substring of a string.
</p></li><li><p><a name="DBDictionary.DistinctCountColumnSeparator"></a>
<a class="indexterm" name="d0e18195"></a>
<code class="literal">DistinctCountColumnSeparator</code>: The string the database uses
to delimit between column expressions in a <code class="literal">SELECT COUNT(DISTINCT
column-list)</code> clause. Defaults to null for most databases, meaning that
multiple columns in a distinct COUNT clause are not supported.
</p></li><li><p><a name="DBDictionary.ForUpdateClause"></a>
<a class="indexterm" name="d0e18210"></a>
<a class="indexterm" name="d0e18216"></a>
<code class="literal">ForUpdateClause</code>: The clause to append to <code class="literal">SELECT
</code> statements to issue queries that obtain pessimistic locks. Defaults
to <code class="literal">FOR UPDATE</code>.
</p></li><li><p><a name="DBDictionary.TableForUpdateClause"></a>
<a class="indexterm" name="d0e18234"></a>
<a class="indexterm" name="d0e18240"></a>
<code class="literal">TableForUpdateClause</code>: The clause to append to the end of
each table alias in queries that obtain pessimistic locks. Defaults to null.
</p></li><li><p><a name="DBDictionary.SupportsSelectForUpdate"></a>
<a class="indexterm" name="d0e18252"></a>
<code class="literal">SupportsSelectForUpdate</code>: If true, then the database supports
<code class="literal">SELECT</code> statements with a pessimistic locking clause. Defaults
to true.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithDistinctClause"></a>
<a class="indexterm" name="d0e18267"></a>
<code class="literal">SupportsLockingWithDistinctClause</code>: If true, then the
database supports <code class="literal">FOR UPDATE</code> select clauses with <code class="literal">
DISTINCT</code> clauses.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithOuterJoin"></a>
<a class="indexterm" name="d0e18285"></a>
<code class="literal">SupportsLockingWithOuterJoin</code>: If true, then the database
supports <code class="literal">FOR UPDATE</code> select clauses with outer join queries.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithInnerJoin"></a>
<a class="indexterm" name="d0e18300"></a>
<code class="literal">SupportsLockingWithInnerJoin</code>: If true, then the database
supports <code class="literal">FOR UPDATE</code> select clauses with inner join queries.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithMultipleTables"></a>
<a class="indexterm" name="d0e18315"></a>
<code class="literal">SupportsLockingWithMultipleTables</code>: If true, then the
database supports <code class="literal">FOR UPDATE</code> select clauses that select from
multiple tables.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithOrderClause"></a>
<a class="indexterm" name="d0e18330"></a>
<code class="literal">SupportsLockingWithOrderClause</code>: If true, then the database
supports <code class="literal">FOR UPDATE</code> select clauses with <code class="literal">ORDER BY
</code> clauses.
</p></li><li><p><a name="DBDictionary.SupportsLockingWithSelectRange"></a>
<a class="indexterm" name="d0e18348"></a>
<code class="literal">SupportsLockingWithSelectRange</code>: If true, then the database
supports <code class="literal">FOR UPDATE</code> select clauses with queries that select a
range of data using <code class="literal">LIMIT</code>, <code class="literal">TOP</code> or the
database equivalent. Defaults to true.
</p></li><li><p><a name="DBDictionary.SimulateLocking"></a>
<a class="indexterm" name="d0e18369"></a>
<code class="literal">SimulateLocking</code>: Some databases do not support pessimistic
locking, which will result in an exception when you attempt a pessimistic
transaction. Setting this property to <code class="literal">true</code> bypasses the
locking check to allow pessimistic transactions even on databases that do not
support locking. Defaults to <code class="literal">false</code>.
</p></li><li><p><a name="DBDictionary.SupportsQueryTimeout"></a>
<a class="indexterm" name="d0e18387"></a>
<code class="literal">SupportsQueryTimeout</code>: If true, then the JDBC driver supports
calls to <code class="methodname"> java.sql.Statement.setQueryTimeout</code>.
</p></li><li><p><a name="DBDictionary.SupportsHaving"></a>
<a class="indexterm" name="d0e18404"></a>
<code class="literal">SupportsHaving</code>: Whether this database supports HAVING
clauses in selects.
</p></li><li><p><a name="DBDictionary.SupportsSelectStartIndex"></a>
<a class="indexterm" name="d0e18418"></a>
<code class="literal">SupportsSelectStartIndex</code>: Whether this database can create a
select that skips the first N results.
</p></li><li><p><a name="DBDictionary.SupportsSelectEndIndex"></a>
<a class="indexterm" name="d0e18432"></a>
<code class="literal">SupportsSelectEndIndex</code>: Whether this database can create a
select that is limited to the first N results.
</p></li><li><p><a name="DBDictionary.SupportsSubselect"></a>
<a class="indexterm" name="d0e18446"></a>
<a class="indexterm" name="d0e18452"></a>
<code class="literal">SupportsSubselect</code>: Whether this database supports subselects
in queries.
</p></li><li><p><a name="DBDictionary.RequiresAliasForSubselect"></a>
<a class="indexterm" name="d0e18466"></a>
<a class="indexterm" name="d0e18472"></a>
<code class="literal">RequiresAliasForSubselect</code>: If true, then the database
requires that subselects in a FROM clause be assigned an alias.
</p></li><li><p><a name="DBDictionary.SupportsMultipleNontransactionalResultSets"></a>
<code class="literal">SupportsMultipleNontransactionalResultSets</code>: If true, then a
nontransactional connection is capable of having multiple open <code class="classname">
ResultSet</code> instances.
</p></li><li><p><a name="DBDictionary.StorageLimitationsFatal"></a>
<a class="indexterm" name="d0e18495"></a>
<code class="literal">StorageLimitationsFatal</code>: If true, then any data
truncation/rounding that is performed by the dictionary in order to store a
value in the database will be treated as a fatal error, rather than just issuing
a warning.
</p></li><li><p><a name="DBDictionary.StoreLargeNumbersAsStrings"></a>
<a class="indexterm" name="d0e18507"></a>
<code class="literal">StoreLargeNumbersAsStrings</code>: Many databases have limitations
on the number of digits that can be stored in a numeric field (for example,
Oracle can only store 38 digits). For applications that operate on very large
<code class="classname">BigInteger</code> and <code class="classname">BigDecimal</code> values,
it may be necessary to store these objects as string fields rather than the
database's numeric type. Note that this may prevent meaningful numeric queries
from being executed against the database. Defaults to <code class="literal">false</code>.
</p></li><li><p><a name="DBDictionary.StoreCharsAsNumbers"></a>
<a class="indexterm" name="d0e18528"></a>
<code class="literal">StoreCharsAsNumbers</code>: Set this property to <code class="literal">false
</code> to store Java <code class="literal">char</code> fields as <code class="literal">CHAR
</code> values rather than numbers. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.UseGetBytesForBlobs"></a>
<a class="indexterm" name="d0e18552"></a>
<code class="literal">UseGetBytesForBlobs</code>: If true, then <code class="methodname">
ResultSet.getBytes</code> will be used to obtain blob data rather than
<code class="methodname">ResultSet.getBinaryStream</code>.
</p></li><li><p><a name="DBDictionary.UseGetObjectForBlobs"></a>
<a class="indexterm" name="d0e18570"></a>
<code class="literal">UseGetObjectForBlobs</code>: If true, then <code class="methodname">
ResultSet.getObject</code> will be used to obtain blob data rather than
<code class="methodname">ResultSet.getBinaryStream</code>.
</p></li><li><p><a name="DBDictionary.UseSetBytesForBlobs"></a>
<a class="indexterm" name="d0e18588"></a>
<code class="literal">UseSetBytesForBlobs</code>: If true, then <code class="methodname">
PreparedStatement.setBytes</code> will be used to set blob data, rather
than <code class="methodname">PreparedStatement.setBinaryStream</code>.
</p></li><li><p><a name="DBDictionary.UseGetStringForClobs"></a>
<a class="indexterm" name="d0e18606"></a>
<code class="literal">UseGetStringForClobs</code>: If true, then <code class="methodname">
ResultSet.getString</code> will be used to obtain clob data rather than
<code class="methodname">ResultSet.getCharacterStream</code>.
</p></li><li><p><a name="DBDictionary.UseSetStringForClobs"></a>
<a class="indexterm" name="d0e18624"></a>
<code class="literal">UseSetStringForClobs</code>: If true, then <code class="methodname">
PreparedStatement.setString</code> will be used to set clob data, rather
than <code class="methodname">PreparedStatement.setCharacterStream</code>.
</p></li><li><p><a name="DBDictionary.CharacterColumnSize"></a>
<a class="indexterm" name="d0e18642"></a>
<code class="literal">CharacterColumnSize</code>: The default size of <code class="literal">varchar
</code> and <code class="literal">char</code> columns. Typically 255.
</p></li><li><p><a name="DBDictionary.ArrayTypeName"></a>
<a class="indexterm" name="d0e18660"></a>
<code class="literal">ArrayTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.ARRAY</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.BigintTypeName"></a>
<a class="indexterm" name="d0e18678"></a>
<code class="literal">BigintTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.BIGINT</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.BinaryTypeName"></a>
<a class="indexterm" name="d0e18696"></a>
<code class="literal">BinaryTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.BINARY</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.BitTypeName"></a>
<a class="indexterm" name="d0e18714"></a>
<code class="literal">BitTypeName</code>: The overridden default column type for <code class="literal">
java.sql.Types.BIT</code>. This is only used when the schema is generated by
the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.BlobTypeName"></a>
<a class="indexterm" name="d0e18732"></a>
<a class="indexterm" name="d0e18738"></a>
<code class="literal">BlobTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.BLOB</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.CharTypeName"></a>
<a class="indexterm" name="d0e18756"></a>
<code class="literal">CharTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.CHAR</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.ClobTypeName"></a>
<a class="indexterm" name="d0e18774"></a>
<a class="indexterm" name="d0e18780"></a>
<code class="literal">ClobTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.CLOB</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.DateTypeName"></a>
<a class="indexterm" name="d0e18798"></a>
<code class="literal">DateTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.DATE</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.DecimalTypeName"></a>
<a class="indexterm" name="d0e18816"></a>
<code class="literal">DecimalTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.DECIMAL</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.DistinctTypeName"></a>
<a class="indexterm" name="d0e18834"></a>
<code class="literal">DistinctTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.DISTINCT</code>. This is only used when the schema
is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.DoubleTypeName"></a>
<a class="indexterm" name="d0e18852"></a>
<code class="literal">DoubleTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.DOUBLE</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.FloatTypeName"></a>
<a class="indexterm" name="d0e18870"></a>
<code class="literal">FloatTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.FLOAT</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.IntegerTypeName"></a>
<a class="indexterm" name="d0e18888"></a>
<code class="literal">IntegerTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.INTEGER</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.JavaObjectTypeName"></a>
<a class="indexterm" name="d0e18906"></a>
<code class="literal">JavaObjectTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.JAVAOBJECT</code>. This is only used when the schema
is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.LongVarbinaryTypeName"></a>
<a class="indexterm" name="d0e18924"></a>
<code class="literal">LongVarbinaryTypeName</code>: The overridden default column type
for <code class="literal">java.sql.Types.LONGVARBINARY</code>. This is only used when the
schema is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.LongVarcharTypeName"></a>
<a class="indexterm" name="d0e18942"></a>
<code class="literal">LongVarcharTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.LONGVARCHAR</code>. This is only used when the
schema is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.NullTypeName"></a>
<a class="indexterm" name="d0e18960"></a>
<code class="literal">NullTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.NULL</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.NumericTypeName"></a>
<a class="indexterm" name="d0e18978"></a>
<code class="literal">NumericTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.NUMERIC</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.OtherTypeName"></a>
<a class="indexterm" name="d0e18996"></a>
<code class="literal">OtherTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.OTHER</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.RealTypeName"></a>
<a class="indexterm" name="d0e19014"></a>
<code class="literal">RealTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.REAL</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.RefTypeName"></a>
<a class="indexterm" name="d0e19032"></a>
<code class="literal">RefTypeName</code>: The overridden default column type for <code class="literal">
java.sql.Types.REF</code>. This is only used when the schema is generated by
the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.SmallintTypeName"></a>
<a class="indexterm" name="d0e19050"></a>
<code class="literal">SmallintTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.SMALLINT</code>. This is only used when the schema
is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.StructTypeName"></a>
<a class="indexterm" name="d0e19068"></a>
<code class="literal">StructTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.STRUCT</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.TimeTypeName"></a>
<a class="indexterm" name="d0e19086"></a>
<code class="literal">TimeTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.TIME</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.TimestampTypeName"></a>
<a class="indexterm" name="d0e19104"></a>
<code class="literal">TimestampTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.TIMESTAMP</code>. This is only used when the schema
is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.TinyintTypeName"></a>
<a class="indexterm" name="d0e19122"></a>
<code class="literal">TinyintTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.TINYINT</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.VarbinaryTypeName"></a>
<a class="indexterm" name="d0e19140"></a>
<code class="literal">VarbinaryTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.VARBINARY</code>. This is only used when the schema
is generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.VarcharTypeName"></a>
<a class="indexterm" name="d0e19158"></a>
<code class="literal">VarcharTypeName</code>: The overridden default column type for
<code class="literal">java.sql.Types.VARCHAR</code>. This is only used when the schema is
generated by the <code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.UseSchemaName"></a>
<a class="indexterm" name="d0e19176"></a>
<code class="literal">UseSchemaName</code>: If <code class="literal">false</code>, then avoid
including the schema name in table name references. Defaults to <code class="literal">true
</code>.
</p></li><li><p><a name="DBDictionary.TableTypes"></a>
<a class="indexterm" name="d0e19194"></a>
<code class="literal">TableTypes</code>: Comma-separated list of table types to use when
looking for tables during schema reflection, as defined in the <code class="methodname">
java.sql.DatabaseMetaData.getTableInfo</code> JDBC method. An example is:
<code class="literal">"TABLE,VIEW,ALIAS"</code>. Defaults to <code class="literal">"TABLE"</code>.
</p></li><li><p><a name="DBDictionary.SupportsSchemaForGetTables"></a>
<a class="indexterm" name="d0e19217"></a>
<code class="literal">SupportsSchemaForGetTables</code>: If false, then the database
driver does not support using the schema name for schema reflection on table
names.
</p></li><li><p><a name="DBDictionary.SupportsSchemaForGetColumns"></a>
<a class="indexterm" name="d0e19231"></a>
<code class="literal">SupportsSchemaForGetColumns</code>: If false, then the database
driver does not support using the schema name for schema reflection on column
names.
</p></li><li><p><a name="DBDictionary.SupportsNullTableForGetColumns"></a>
<a class="indexterm" name="d0e19245"></a>
<code class="literal">SupportsNullTableForGetColumns</code>: If true, then the database
supports passing a <code class="literal">null</code> parameter to <code class="methodname">
DatabaseMetaData.getColumns</code> as an optimization to get information
about all the tables. Defaults to <code class="literal">true</code>.
</p></li><li><p><a name="DBDictionary.SupportsNullTableForGetPrimaryKeys"></a>
<a class="indexterm" name="d0e19268"></a>
<code class="literal">SupportsNullTableForGetPrimaryKeys</code>: If true, then the
database supports passing a <code class="literal">null</code> parameter to <code class="methodname">
DatabaseMetaData.getPrimaryKeys</code> as an optimization to get
information about all the tables. Defaults to <code class="literal">false</code>.
</p></li><li><p><a name="DBDictionary.SupportsNullTableForGetIndexInfo"></a>
<a class="indexterm" name="d0e19291"></a>
<code class="literal">SupportsNullTableForGetIndexInfo</code>: If true, then the database
supports passing a <code class="literal">null</code> parameter to <code class="methodname">
DatabaseMetaData.getIndexInfo</code> as an optimization to get information
about all the tables. Defaults to <code class="literal">false</code>.
</p></li><li><p><a name="DBDictionary.SupportsNullTableForGetImportedKeys"></a>
<a class="indexterm" name="d0e19314"></a>
<code class="literal">SupportsNullTableForGetImportedKeys</code>: If true, then the
database supports passing a <code class="literal">null</code> parameter to <code class="methodname">
DatabaseMetaData.getImportedKeys</code> as an optimization to get
information about all the tables. Defaults to <code class="literal">false</code>.
</p></li><li><p><a name="DBDictionary.UseGetBestRowIdentifierForPrimaryKeys"></a>
<a class="indexterm" name="d0e19337"></a>
<code class="literal">UseGetBestRowIdentifierForPrimaryKeys</code>: If true, then
metadata queries will use <code class="methodname">DatabaseMetaData.getBestRowIdentifier
</code> to obtain information about primary keys, rather than <code class="methodname">
DatabaseMetaData.getPrimaryKeys</code>.
</p></li><li><p><a name="DBDictionary.RequiresAutoCommitForMetadata"></a>
<a class="indexterm" name="d0e19357"></a>
<code class="literal">RequiresAutoCommitForMetadata</code>: If true, then the JDBC driver
requires that autocommit be enabled before any schema interrogation operations
can take place.
</p></li><li><p><a name="DBDictionary.AutoAssignClause"></a>
<a class="indexterm" name="d0e19371"></a>
<code class="literal">AutoAssignClause</code>: The column definition clause to append to
a creation statement. For example, " <code class="literal">AUTO_INCREMENT</code> " for
MySQL. This property is set automatically in the dictionary, and should not need
to be overridden, and is only used when the schema is generated using the
<code class="literal">mappingtool</code>.
</p></li><li><p><a name="DBDictionary.AutoAssignTypeName"></a>
<a class="indexterm" name="d0e19391"></a>
<a class="indexterm" name="d0e19397"></a>
<code class="literal">AutoAssignTypeName</code>: The column type name for auto-increment
columns. For example, " <code class="literal">SERIAL</code> " for PostgreSQL. This
property is set automatically in the dictionary, and should not need to be
overridden, and is only used when the schema is generated using the <code class="literal">
mappingtool</code>.
</p></li><li><p><a name="DBDictionary.LastGeneratedKeyQuery"></a>
<a class="indexterm" name="d0e19417"></a>
<code class="literal">LastGeneratedKeyQuery</code>: The query to issue to obtain the last
automatically generated key for an auto-increment column. For example, "
<code class="literal">select @@identity</code> " for Sybase. This property is set
automatically in the dictionary, and should not need to be overridden.
</p></li><li><p><a name="DBDictionary.NextSequenceQuery"></a>
<a class="indexterm" name="d0e19434"></a>
<code class="literal">NextSequenceQuery</code>: A SQL string for obtaining a native
sequence value. May use a placeholder of <code class="literal">{0}</code> for the variable
sequence name. Defaults to a database-appropriate value.
</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ref_guide_dbsetup_dbsupport_mysql"></a>4.2.&nbsp;
MySQLDictionary Properties
</h3></div></div></div><a class="indexterm" name="d0e19449"></a><p>
The <code class="literal">mysql</code> dictionary also understands the following
properties:
</p><div class="itemizedlist"><ul type="disc"><li><p><a name="MySQLDictionary.DriverDeserializesBlobs"></a>
<a class="indexterm" name="d0e19463"></a>
<code class="literal">DriverDeserializesBlobs</code>: Many MySQL drivers automatically
deserialize BLOBs on calls to <code class="methodname">ResultSet.getObject</code>. The
<code class="classname">MySQLDictionary</code> overrides the standard <code class="methodname">
DBDictionary.getBlobObject</code> method to take this into account. If
your driver does not deserialize automatically, set this property to <code class="literal">
false</code>.
</p></li><li><p><a name="MySQLDictionary.TableType"></a>
<a class="indexterm" name="d0e19487"></a>
<code class="literal">TableType</code>: The MySQL table type to use when creating tables.
Defaults to <code class="literal">innodb</code>.
</p></li><li><p><a name="MySQLDictionary.UseClobs"></a>
<a class="indexterm" name="d0e19502"></a>
<code class="literal">UseClobs</code>: Some older versions of MySQL do not handle clobs
correctly. To enable clob functionality, set this to true. Defaults to <code class="literal">
false</code>.
</p></li><li><p><a name="MySQLDictionary.OptimizeMultiTableDeletes"></a>
<a class="indexterm" name="d0e19517"></a>
<code class="literal">OptimizeMultiTableDeletes</code>: MySQL as of version 4.0.0
supports multiple tables in <code class="literal">DELETE</code> statements. When
this option is set, OpenJPA will use that syntax when doing bulk deletes
from multiple tables. This can happen when the
<code class="literal">deleteTableContents</code> <code class="literal">SchemaTool</code>
action is used. (See <a href="ref_guide_schema_schematool.html" title="12.&nbsp; Schema Tool">Section&nbsp;12, &#8220;
Schema Tool
&#8221;</a> for
more info about <code class="literal">deleteTableContents</code>.) Defaults to
<code class="literal">false</code>, since the statement may fail if using InnoDB
tables and delete constraints.
</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ref_guide_dbsetup_dbsupport_oracle"></a>4.3.&nbsp;
OracleDictionary Properties
</h3></div></div></div><a class="indexterm" name="d0e19546"></a><p>
The <code class="literal">oracle</code> dictionary understands the following additional
properties:
</p><div class="itemizedlist"><ul type="disc"><li><p><a name="OracleDictionary.UseTriggersForAutoAssign"></a>
<a class="indexterm" name="d0e19560"></a>
<a class="indexterm" name="d0e19566"></a>
<code class="literal">UseTriggersForAutoAssign</code>: If true, then OpenJPA will allow
simulation of auto-increment columns by the use of Oracle triggers. OpenJPA will
assume that the current sequence value from the sequence specified in the
<code class="literal">AutoAssignSequenceName</code> parameter will hold the value of the
new primary key for rows that have been inserted. For more details on
auto-increment support, see <a href="ref_guide_pc_oid.html#ref_guide_pc_oid_pkgen_autoinc" title="3.4.&nbsp; Autoassign / Identity Strategy Caveats">Section&nbsp;3.4, &#8220;
Autoassign / Identity Strategy Caveats
&#8221;</a>
.
</p></li><li><p><a name="OracleDictionary.AutoAssignSequenceName"></a>
<a class="indexterm" name="d0e19585"></a>
<a class="indexterm" name="d0e19591"></a>
<code class="literal">AutoAssignSequenceName</code>: The global name of the sequence that
OpenJPA will assume to hold the value of primary key value for rows that use
auto-increment. If left unset, OpenJPA will use a the sequence named <code class="literal">
"SEQ_&lt;table name&gt;"</code>.
</p></li><li><p><a name="OracleDictionary.MaxEmbeddedBlobSize"></a>
<a class="indexterm" name="d0e19608"></a>
<a class="indexterm" name="d0e19614"></a>
<code class="literal">MaxEmbeddedBlobSize</code>: Oracle is unable to persist BLOBs using
the embedded update method when BLOBs get over a certain size. The size depends
on database configuration, e.g. encoding. This property defines the maximum size
BLOB to persist with the embedded method. Defaults to 4000 bytes.
</p></li><li><p><a name="OracleDictionary.MaxEmbeddedClobSize"></a>
<a class="indexterm" name="d0e19626"></a>
<a class="indexterm" name="d0e19632"></a>
<code class="literal">MaxEmbeddedClobSize</code>: Oracle is unable to persist CLOBs using
the embedded update method when Clobs get over a certain size. The size depends
on database configuration, e.g. encoding. This property defines the maximum size
CLOB to persist with the embedded method. Defaults to 4000 characters.
</p></li><li><p><a name="OracleDictionary.UseSetFormOfUseForUnicode"></a>
<code class="literal">UseSetFormOfUseForUnicode</code>: Prior to Oracle 10i, statements
executed against unicode capable columns (the <code class="literal">NCHAR</code>,
<code class="literal">NVARCHAR</code>, <code class="literal">NCLOB</code> Oracle types) required
special handling to be able to store unicode values. Setting this property to
true (the default) will cause OpenJPA to attempt to detect when the column of
one of these types, and if so, will attempt to correctly configure the statement
using the <code class="methodname"> OraclePreparedStatement.setFormOfUse</code>. For
more details, see the Oracle
<a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/nchar/readme.html" target="_top">
Readme For NChar</a>. Note that this can only work if OpenJPA is able to
access the underlying <code class="classname">OraclePreparedStatement</code> instance,
which may not be possible when using some third-party datasources. If OpenJPA
detects that this is the case, a warning will be logged.
</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ref_guide_dbsetup_sqlconn.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ref_guide_dbsetup.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ref_guide_dbsetup_isolation.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3.&nbsp;
Runtime Access to DataSource
&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="manual.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;5.&nbsp;
Setting the Transaction Isolation
</td></tr></table></div></body></html>