blob: 1923a7667855e24173769f49a1cb8fef5e684cda [file] [log] [blame]
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- No caching headers -->
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="expires" content="-1"/>
<meta name="keywords" content="JDO, Apache, Java, Data, Objects"/>
<meta name="description" content="Apache JDO - Java Data Objects"/>
<title>Which Persistence Specification ?</title>
<link rel="icon" type="image/png" href="https://apache.github.io/db-jdo-site/images/JDO_32x32.png"/>
<!--
Apache JDO Documentation Template
==================================
This template derived various aspects from Apache Deltaspike template, the Apache ISIS template and the Datanucleus template.
This template uses
* Bootstrap v3.3.7 (https://getbootstrap.com/) for navbar.
* Asciidoctor "foundation" CSS
* Bootswatch "cosmo" theme for Bootstrap (https://bootswatch.com/cosmo).
* Bootstrap TOC plugin v0.4.1 (https://afeld.github.io/bootstrap-toc/) for the table of contents.
* jQuery (necessary for Bootstrap's JavaScript plugins)
* Font-Awesome for some icons used by Asciidoctor
NOTE: tried using Font-Awesome CSS hosted locally but then fails to work!
-->
<link href="css/bootswatch/3.3.7/bootstrap-cosmo.css" rel="stylesheet"/>
<link href="css/bootstrap-toc/0.4.1/bootstrap-toc.min.css" rel="stylesheet"/>
<link href="css/asciidoctor/foundation.css" rel="stylesheet"/>
<link href="css/datanucleus_theme.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/bootstrap/3.3.7/bootstrap.min.js"></script>
<script src="js/bootstrap-toc/0.4.1/bootstrap-toc.min.js"></script>
<!-- Coderay syntax formatter -->
<style type="text/css">
/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
/*pre.CodeRay {background-color:#f7f7f8;}*/
.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
table.CodeRay td{vertical-align: top;line-height:1.45}
table.CodeRay td.line-numbers{text-align:right}
table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
table.CodeRay td.code{padding:0 0 0 .5em}
table.CodeRay td.code>pre{padding:0}
.CodeRay .debug{color:#fff !important;background:#000080 !important}
.CodeRay .annotation{color:#007}
.CodeRay .attribute-name{color:#000080}
.CodeRay .attribute-value{color:#700}
.CodeRay .binary{color:#509}
.CodeRay .comment{color:#998;font-style:italic}
.CodeRay .char{color:#04d}
.CodeRay .char .content{color:#04d}
.CodeRay .char .delimiter{color:#039}
.CodeRay .class{color:#458;font-weight:bold}
.CodeRay .complex{color:#a08}
.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
.CodeRay .color{color:#099}
.CodeRay .class-variable{color:#369}
.CodeRay .decorator{color:#b0b}
.CodeRay .definition{color:#099}
.CodeRay .delimiter{color:#000}
.CodeRay .doc{color:#970}
.CodeRay .doctype{color:#34b}
.CodeRay .doc-string{color:#d42}
.CodeRay .escape{color:#666}
.CodeRay .entity{color:#800}
.CodeRay .error{color:#808}
.CodeRay .exception{color:inherit}
.CodeRay .filename{color:#099}
.CodeRay .function{color:#900;font-weight:bold}
.CodeRay .global-variable{color:#008080}
.CodeRay .hex{color:#058}
.CodeRay .integer,.CodeRay .float{color:#099}
.CodeRay .include{color:#555}
.CodeRay .inline{color:#000}
.CodeRay .inline .inline{background:#ccc}
.CodeRay .inline .inline .inline{background:#bbb}
.CodeRay .inline .inline-delimiter{color:#d14}
.CodeRay .inline-delimiter{color:#d14}
.CodeRay .important{color:#555;font-weight:bold}
.CodeRay .interpreted{color:#b2b}
.CodeRay .instance-variable{color:#008080}
.CodeRay .label{color:#970}
.CodeRay .local-variable{color:#963}
.CodeRay .octal{color:#40e}
.CodeRay .predefined{color:#369}
.CodeRay .preprocessor{color:#579}
.CodeRay .pseudo-class{color:#555}
.CodeRay .directive{font-weight:bold}
.CodeRay .type{font-weight:bold}
.CodeRay .predefined-type{color:inherit}
.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
.CodeRay .key{color:#808}
.CodeRay .key .delimiter{color:#606}
.CodeRay .key .char{color:#80f}
.CodeRay .value{color:#088}
.CodeRay .regexp .delimiter{color:#808}
.CodeRay .regexp .content{color:#808}
.CodeRay .regexp .modifier{color:#808}
.CodeRay .regexp .char{color:#d14}
.CodeRay .regexp .function{color:#404;font-weight:bold}
.CodeRay .string{color:#d20}
.CodeRay .string .string .string{background:#ffd0d0}
.CodeRay .string .content{color:#d14}
.CodeRay .string .char{color:#d14}
.CodeRay .string .delimiter{color:#d14}
.CodeRay .shell{color:#d14}
.CodeRay .shell .delimiter{color:#d14}
.CodeRay .symbol{color:#990073}
.CodeRay .symbol .content{color:#a60}
.CodeRay .symbol .delimiter{color:#630}
.CodeRay .tag{color:#008080}
.CodeRay .tag-special{color:#d70}
.CodeRay .variable{color:#036}
.CodeRay .insert{background:#afa}
.CodeRay .delete{background:#faa}
.CodeRay .change{color:#aaf;background:#007}
.CodeRay .head{color:#f8f;background:#505}
.CodeRay .insert .insert{color:#080}
.CodeRay .delete .delete{color:#800}
.CodeRay .change .change{color:#66f}
.CodeRay .head .head{color:#f4f}
</style>
</head>
<body data-spy="scroll" data-target="#toc">
<!-- Navbar -->
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<!-- Three line menu button for use on mobile screens -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- 'style' added to align image with navbar. FIX THIS -->
<a class="navbar-brand" href="https://db.apache.org/jdo/">
<img style="margin-top: -12px;" alt="Brand" src="images/JDO_44x44.png"/>
</a>
<!-- TODO Any way to abstract the version from Maven? -->
<a class="navbar-brand" href="index.html">Apache JDO</a>
</div>
<!-- Navbar that will collapse on mobile screens -->
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<!-- menu item General -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" style="background-color:#2385c6">General<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="why_jdo.html">Why JDO?</a></li>
<li><a href="getting-started.html">Getting Started</a></li>
<li><a href="specifications.html">Specifications</a></li>
<li><a href="tck.html">TCK</a></li>
<li><a href="javadoc.html">API Javadoc</a></li>
<li role="separator" class="divider"></li>
<li><a href="jdo_v_jpa.html">JDO v JPA</a></li>
<li><a href="jdo_v_jpa_api.html">JDO v JPA : API</a></li>
<li><a href="jdo_v_jpa_orm.html">JDO v JPA : ORM</a></li>
<li role="separator" class="divider"></li>
<li><a href="license.html">License</a></li>
<li><a href="impls.html">Implementations</a></li>
<li><a href="jdo_3_0_overview.html">JDO 3.0 Overview</a></li>
<li><a href="references.html">References</a></li>
<li><a href="glossary.html">Glossary</a></li>
</ul>
</li>
<!-- menu item API Usage -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">API Usage<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="jdohelper.html">JDO Helper</a></li>
<li><a href="pmf.html">PersistenceManagerFactory</a></li>
<li><a href="pm.html">PersistenceManager</a></li>
<li><a href="transactions.html">Transactions</a></li>
<li><a href="attach_detach.html">Attach-Detach</a></li>
<li><a href="fetchgroups.html">Fetch Groups</a></li>
<li><a href="state_transition.html">Object States</a></li>
<li><a href="object_retrieval.html">Object Retrieval</a></li>
<li><a href="exceptions.html">Exceptions</a></li>
<li role="separator" class="divider"></li>
<li><a href="guides-replication.html">Data Replication</a></li>
</ul>
</li>
<!-- menu item Types & Metadata -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Types &amp; Metadata<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="class_types.html">Types of Classes</a></li>
<li><a href="field_types.html">Types of Fields</a></li>
<li role="separator" class="divider"></li>
<!-- <li class="dropdown-header">Metadata</li> -->
<li><a href="metadata.html">MetaData</a></li>
<li><a href="annotations.html">Annotations</a></li>
<li><a href="jdo_dtd.html">jdo DTD/XSD</a></li>
<li><a href="orm_dtd.html">orm DTD/XSD</a></li>
<li><a href="jdoquery_dtd.html">jdoquery DTD/XSD</a></li>
<li><a href="jdoconfig_dtd.html">jdoconfig DTD/XSD</a></li>
<li role="separator" class="divider"></li>
<li><a href="enhancement.html">Bytecode Enhancement</a></li>
</ul>
</li>
<!-- menu item Query -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Query<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="jdoql.html">JDOQL</a></li>
<li><a href="jdoql_result.html">Result</a></li>
<li><a href="jdoql_methods.html">Methods</a></li>
<li><a href="jdoql_quickref.pdf">Quick Ref PDF</a></li>
<li role="separator" class="divider"></li>
<li><a href="extents.html">Extents</a></li>
</ul>
</li>
<!-- menu item Community -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="get-involved.html">Get Involved</a></li>
<li><a href="team-list.html">Project Team</a></li>
<li><a href="mail-lists.html">Mailing Lists</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</li>
<!-- menu item Development -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Development<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="roadmap.html">RoadMap / TODO</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="source-code.html">Source Code</a></li>
<li><a href="coding-standards.html">Coding Standards</a></li>
<li><a href="issuetracking.html">Issue Tracking</a></li>
</ul>
</li>
</ul>
<!-- 'style' added to fix height of input box. FIX THIS -->
<form class="navbar-form navbar-left" role="search" id="search-form" action="https://www.google.com/search" method="get" style="padding: 1px 15px;">
<div class="form-group">
<input name="sitesearch" value="db.apache.org/jdo" type="hidden">
<input name="q" type="text" class="form-control" placeholder="Search" style="margin-top: 7px; padding: 1px; border-radius: 5px; height: 30px; vertical-align: middle;">
</div>
</form>
</div>
</div>
</nav>
<div class="container">
<!-- No TOC -->
<div class="row-fluid">
<div class="col-sm-12">
<!-- no heading -->
<div id="doc-content">
<div class="sect1">
<h2 id="index">Which Persistence Specification ?<a id="Which_Persistence_Specification_"></a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are several competing persistence technologies available for Java.
Two of these are "standardised" (via the JCP). When developing your
application you need to choose the most appropriate technology for your
needs. <strong>Java Data Objects (JDO)</strong> has been a standard since 2001 with the
release of JDO1. It was improved with the release of JDO2. Just to
confuse issues the <strong>Java Persistence API (JPA)</strong> was approved in its JPA1
form, and JDO2.1/JDO2.2 provide updates to JDO2 building on some of the
new features of JPA1. Since then we have had JDO3 adding on extra
metadata and enhancer standardisation, JPA2 providing criteria queries
and JPA2.1 adding some further features. Below we show some of the
differences of these 2 standards to give you assistance in selecting
what you need. Highlighted in bold are the notable differences where one
specification provides something not available in the other.</p>
</div>
<table class="tableblock frame-all grid-cols spread">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Feature</th>
<th class="tableblock halign-left valign-top">JDO</th>
<th class="tableblock halign-left valign-top">JPA</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">JDK Requirement</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>1.3+</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5+</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Usage</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">J2EE, J2SE</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">J2EE, J2SE</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Persistence specification mechanism</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">XML, Annotations, <strong>API</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">XML,
Annotations</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Datastore supported</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Any</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">RDBMS only</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Restrictions on persisted classes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>no-arg constructor (could be added
by compiler/enhancer)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No final classes. No final methods. Non-private
no-arg constructor. Identity Field. Version Field.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Ability to persist "transient" fields</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Yes</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Persist static/final fields</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Not specified</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Transactions</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Pessimistic</strong>, Optimistic</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Optimistic, some locking</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Object Identity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>datastore-identity</strong>, application-identity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">application-identity</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Object Identity generation</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Sequence, Table, Identity, Auto, <strong>UUID
String, UUID Hex</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Sequence, Table, Identity, Auto</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Change objects identity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Throw exception when not allowed</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined
!!</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Supported types</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Java primitive types, wrappers of primitive types,
java.lang.String, <strong>java.lang.Number</strong>, java.math.BigInteger,
java.math.BigDecimal, <strong>java.util.Currency, java.util.Locale</strong>,
java.util.Date, java.sql.Time, java.sql.Date, java.sql.Timestamp,
java.io.Serializable, <strong>boolean[]</strong>, byte[], char[], <strong>double[], float[],
int[], long[], short[]</strong>, <strong>java.lang.Object</strong>, <strong>interface</strong>, <strong>Boolean[]</strong>,
Byte[], Character[], <strong>Double[], Float[], Integer[], Long[], Short[],
BigDecimal[], BigInteger[], String[]</strong>, <strong>PersistenceCapable[]</strong>,
<strong>interface[]</strong>, <strong>Object[]</strong>, Enums, java.util.Collection, java.util.Set,
java.util.List, java.util.Map, <strong>Collection/List/Map of simple types</strong>,
<strong>Collection/List/Map of reference (interface/Object) types</strong>,
Collection/List/Map of persistable types</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Java primitive types, wrappers
of the primitive types, java.lang.String, java.math.BigInteger,
java.math.BigDecimal, java.util.Date, <strong>java.util.Calendar</strong>,
java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.Serializable,
byte[], Byte[], char[], Character[], Enums, java.util.Collection,
java.util.Set, java.util.List, java.util.Map Collection/List/Map of
persistable types</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Embedded Fields</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Embedded persistent objects, <strong>Embedded Collections,
Embedded Maps</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Embedded persistent objects</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Access a non-detached field</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Throw exception</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined !!</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Inheritance</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Each class has its own strategy</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Root class defines the
strategy</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Operation cascade default</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">persist, (delete)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Operation Cascade configuration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">delete</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">persist, delete, refresh</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query Language</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JDOQL, SQL, others</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JPQL, SQL</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query candidates</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Candidate without subclasses</strong>, Candidate and its
subclasses</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Candidate and its subclasses</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query of candidate collection</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>yes</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">no</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query language case sensitivity</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JDOQL lowercase/UPPERCASE</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JPQL
case-insensitive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query language aliases</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No, but has variables in JDOQL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Yes in JPQL</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query Criteria API</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No, available as extension in QueryDSL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Yes</strong></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Object retrieval control</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Lazy/Eager control, <strong>fetch groups</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Lazy/Eager control, <strong>entity graphs</strong></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Bulk update/delete</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JDOQL Bulk Delete</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JPQL Bulk Delete, <strong>JPQL Bulk
Update</strong></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">RDBMS Schema Control</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Tables, columns, PK columns, <strong>PK constraints</strong>, FK
columns, <strong>FK constraints</strong>, <strong>index columns</strong>, <strong>index constraints</strong>, unique
key columns, <strong>unique key constraints</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Tables, columns, PK columns, FK
columns, unique key columns</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ORM Relationships</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="jdo_v_jpa_orm.html"><strong>Full range of Collection,
Map, List, Array, 1-1, 1-N, M-N using PC, Non-PC and interface objects</strong></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Basic 1-1, 1-N, M-N, Collection&lt;NonPC&gt;, Map&lt;NonPC&gt;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Default ORM column size</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">256</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">255</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Default ORM identifiers (tables/columns)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Yes</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Default ORM mappings</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Yes, JDBC types defined for Java types</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">No</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Caching interface</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">L2 Caching API</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">L2 Caching API</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>As an overall conclusion "JPA" is a subset of what is available in
"JDO".</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer style="color:#fff; background-color:#222222; padding: 5px;">
<div class="container">
<div class="row" style="margin-top:25px">
<div class="col-sm" align="center">
<a href="https://www.facebook.com/JavaDataObjects" class="externalLink" title="Facebook">Facebook</a>
|
<a href="https://twitter.com/JavaDataObjects" class="externalLink" title="Twitter">Twitter</a>
|
<a href="http://wiki.apache.org/jdo" class="externalLink" title="Wiki">Wiki</a>
|
<a href="http://issues.apache.org/jira/secure/BrowseProject.jspa?id=10630" class="externalLink" title="Issue Tracker">Issue Tracker</a>
|
<a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a>
|
<a href="api31/apidocs/index.html" title="Latest Javadocs">Latest Javadocs</a>
</div>
</div>
<p class="text-center" style="margin-top:16px">&copy; 2005-2020 Apache Software Foundation. All Rights Reserved.</p>
</div>
</footer>
</body>
</html>