blob: cbaaf3b2e06a89442b3b23710b6ed8a94dab0399 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
<link rel="apple-touch-icon" sizes="180x180" href="/img/favicon/apple-touch-icon-04cb17e028.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon/favicon-32x32-12431ee8eb.png">
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon/favicon-16x16-4f316e4d55.png">
<link rel="manifest" href="/img/favicon/manifest-65e6aaa49e.json">
<link rel="mask-icon" href="/img/favicon/safari-pinned-tab-558c1991b1.svg" color="#dc5656">
<link rel="shortcut icon" href="/img/favicon/favicon-6cef91375b.ico">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/img/favicon/mstile-144x144-34e7696278.png">
<meta name="msapplication-config" content="/img/favicon/browserconfig-82ff158058.xml">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="https://cayenne.apache.org/css/styles-9ee2e6e330.css"/>
<script src="https://cayenne.apache.org/js/bundle-c0e6356367.js"></script>
<title>Guide to 4.2 Features &middot; Apache Cayenne</title>
</head>
<body data-spy="scroll" data-target=".toc-side" class="cd-head">
<header class="page-header">
<nav id="topbar" class="bg-dark" aria-label="breadcrumb" role="navigation">
<ul class="breadcrumb breadcrumb-sm breadcrumb-dark container mb-0">
<li class="breadcrumb-item dropdown">
<a class="dropdown-toggle text-nowrap pr-1" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img class="mw-15px mr-1" src="/img/feather-641aa69d09.svg" />Apache Software Foundation</a>
<div class="dropdown-menu rounded-0" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="https://www.apache.org">Apache Homepage</a>
<a class="dropdown-item" href="https://www.apache.org/licenses/">License</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
<a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
<a class="dropdown-item" href="https://www.apache.org/security/">Security</a>
<a class="dropdown-item" href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a>
<a class="ml-1 mt-1 acevent" data-format="wide" data-mode="dark" data-width="120"></a>
</div>
</li>
</ul>
</nav>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="https://cayenne.apache.org/">
<img src="/img/logo_mono_full-d7a19eef61.svg" alt="Apache Cayenne" />
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainMenu" aria-controls="mainMenu" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainMenu">
<ul class="navbar-nav mt-3 mt-lg-0 mr-auto">
<li class="nav-item">
<a class="nav-link" href="/download/">DOWNLOAD</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/docs/4.2/getting-started-guide/">DOCUMENTATION</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about/support/">SUPPORT</a>
</li>
</ul>
<ul class="navbar-nav flex-row justify-content-center mt-2 mt-lg-0 mb-2 mb-lg-0 " id="social-links-menu">
<li class="nav-item d-flex">
<a class="nav-link d-flex justify-content-center align-items-center" href="https://github.com/apache/cayenne">
<img src="/img/icon_octocat_stars-c24dac94b8.svg" alt="GitHub" />
</a>
</li>
<li class="nav-item d-flex">
<a class="nav-link d-flex justify-content-center align-items-center" href="https://twitter.com/ApacheCayenne">
<img src="/img/icon_twitter-220a129d14.svg" alt="Twitter" />
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main>
<div class="cd-top-sidebar bb">
<div class="container">
<div class="row no-gutters">
<div class="col-12 col-lg-4 col-xl-3 br cd-sidebar1">
<ul class="nav" role="tablist">
<li class="nav-item dropdown mw-100">
<a class="nav-link dropdown-toggle text-truncate" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
Cayenne Version 4.2
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="/docs/5.0/cayenne-guide/">Version 5.0 (Alpha)</a><a class="dropdown-item" href="/docs/4.2/getting-started-guide/">Version 4.2 (Stable)</a><a class="dropdown-item" href="/docs/4.1/getting-started-guide/">Version 4.1 (Stable)</a><a class="dropdown-item" href="/docs/4.0/getting-started-guide/">Version 4.0 (Aging)</a><a class="dropdown-item" href="/docs/3.1/getting-started-guide/">Version 3.1 (Legacy)</a>
</div>
</li>
</ul>
</div>
<div class="col-12 col-lg-8 col-xl-9"> </div>
</div>
</div>
</div>
<div class="container">
<div class="row no-gutters ">
<div class="col-12 col-lg-4 col-xl-3 br py-2 bg-gray-100 cd-sidebar">
<div class="tab-content" id="cd-docs-nav">
<div class="cd-toc-item">
<a class="cd-toc-link" href="/docs/4.2/getting-started-guide/">Getting Started</a>
</div>
<div class="cd-toc-item">
<a class="cd-toc-link" href="/docs/4.2/cayenne-guide/">Cayenne Guide</a>
</div>
<div class="cd-toc-item">
<a class="cd-toc-link" href="/docs/4.2/getting-started-db-first/">Database First Tutorial</a>
</div>
<div class="cd-toc-item">
<a class="cd-toc-link" href="/docs/4.2/getting-started-rop/">Getting Started ROP</a>
</div>
<div class="cd-toc-item">
<span class="cd-toc-link active">Upgrade Guide</span><div id="toc" class="toc toc-side">
<div id="toctitle">
Table of Contents
</div>
<ul class="sectlevel1 nav">
<li><a href="#java-version" class="nav-link">1. Java Version</a></li>
<li><a href="#new-features" class="nav-link">2. New Features</a>
<ul class="sectlevel2 nav">
<li><a href="#subqueries" class="nav-link">2.1. Subqueries</a></li>
<li><a href="#new-property-api" class="nav-link">2.2. New Property API</a></li>
<li><a href="#new-types-support" class="nav-link">2.3. New types support</a></li>
</ul> </li>
<li><a href="#deprecations-and-api-incompatibilities" class="nav-link">3. Deprecations and API incompatibilities</a>
<ul class="sectlevel2 nav">
<li><a href="#selectquery" class="nav-link">3.1. SelectQuery</a></li>
<li><a href="#obsolete-modules" class="nav-link">3.2. Obsolete modules</a></li>
<li><a href="#objectid" class="nav-link">3.3. ObjectId</a></li>
</ul> </li>
</ul>
</div>
</div>
<div class="cd-toc-item">
<a class="cd-toc-link" href="/docs/4.2/api/">JavaDoc</a></div>
</div>
</div>
<div class="col-12 col-lg-8 col-xl-9 py-3 pl-lg-5 cd-content">
<article>
<header>
<h1>Guide to 4.2 Features</h1>
</header>
<section>
<div class="sect1">
<h2 id="java-version"><a class="anchor" href="#java-version"></a>1. Java Version</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Minimum required JDK version is 8 or newer. Cayenne 4.2 is fully tested with Java 8, 11 and 17.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="new-features"><a class="anchor" href="#new-features"></a>2. New Features</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="subqueries"><a class="anchor" href="#subqueries"></a>2.1. Subqueries</h3>
<div class="paragraph">
<p>Expressions are now support subqueries.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java java" data-lang="java">ColumnSelect&lt;Long&gt; subQuery = ObjectSelect
.columnQuery(Artist.class, Artist.ARTIST_ID_PK_PROPERTY)
.where(...);
List&lt;Artist&gt; artists = ObjectSelect.query(Artist.class)
.where(Artist.ARTIST_ID_PK_PROPERTY.in(subQuery))
.select(context);</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="new-property-api"><a class="anchor" href="#new-property-api"></a>2.2. New Property API</h3>
<div class="paragraph">
<p>Property API are greatly revised. This API allows to use type aware expression factories aka Properties. These properties are normally generated as static constants in model classes, but they can also be created manually by <code>PropertyFactory</code> if needed. New API provides designated properties for different datatypes and relationships, including special variant that represents primary keys.</p>
</div>
<div class="paragraph">
<p>Usage example in <code>ObjectSelect</code> query:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java java" data-lang="java">Painting painting = //...
Artist artist = ObjectSelect.query(Artist.class)
.where(Artist.PAINTING_ARRAY.contains(painting))
.and(Artist.DATE_OF_BIRTH.year().gt(1950))
.and(Artist.ARTIST_NAME.lower().like("pablo%"))
.selectOne(context);</code></pre>
</div>
</div>
<div class="paragraph">
<p>See <a href="https://cayenne.apache.org/docs/4.2/api/org/apache/cayenne/exp/property/package-summary.html">JavaDoc</a> for details.</p>
</div>
</div>
<div class="sect2">
<h3 id="new-types-support"><a class="anchor" href="#new-types-support"></a>2.3. New types support</h3>
<div class="paragraph">
<p>Cayenne 4.2 brings support for the Json and Geo types that are common now in RDBMS, see <a href="https://github.com/apache/cayenne-examples/tree/master/cayenne-jdbc-type-other">this demo</a> for the usage example. Additionally, Cayenne now supports <code>java.time.Duration</code> and <code>java.time.Period</code> out of the box.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deprecations-and-api-incompatibilities"><a class="anchor" href="#deprecations-and-api-incompatibilities"></a>3. Deprecations and API incompatibilities</h2>
<div class="sectionbody">
<div class="paragraph">
<p>For the full list of deprecations refer to <code>UPGRADE.txt</code>. Here’s the most important changes.</p>
</div>
<div class="sect2">
<h3 id="selectquery"><a class="anchor" href="#selectquery"></a>3.1. SelectQuery</h3>
<div class="paragraph">
<p><code>SelectQuery</code> is deprecated in favour of <code>ObjectSelect</code>. It’s still fully functional and could be used, but it will be removed in a future.</p>
</div>
</div>
<div class="sect2">
<h3 id="obsolete-modules"><a class="anchor" href="#obsolete-modules"></a>3.2. Obsolete modules</h3>
<div class="paragraph">
<p>There are several modules that are deprecated in Cayenne 4.2 and will be removed in a later version:</p>
</div>
<div class="ulist">
<ul>
<li> <p>Cayenne ROP</p> </li>
<li> <p>Cayenne Web</p> </li>
<li> <p>Event bridges: XMPP, JMS and JGroups</p> </li>
</ul>
</div>
<div class="paragraph">
<p>These modules could be still safely used in 4.2.</p>
</div>
</div>
<div class="sect2">
<h3 id="objectid"><a class="anchor" href="#objectid"></a>3.3. ObjectId</h3>
<div class="paragraph">
<p>ObjectId can’t be instantiated directly, <code>ObjectId.of(..)</code> factory methods should be used. E.g. <code>ObjectId.of("Artist", 1)</code> instead of <code>new ObjectId("Artist", 1)</code>.</p>
</div>
</div>
</div>
</div>
</section>
<footer>
<div class="row">
<div class="col-6 col-md-3 text-center text-md-left">
&nbsp;
</div>
<div class="col-18 col-md-9 text-center text-md-right">
</div>
</div>
</footer>
</article>
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=5c836e39-be6b-4a21-a946-a97b5b69f172" />
</div>
</div>
</div>
</main>
<footer class="bg-dark">
<div class="footer-nav container text-center text-lg-left pb-3">
<div class="row pt-5 pb-3">
<div class="col-sm-6 col-lg-3">
<h4>About</h4>
<ul class="list-unstyled">
<li>
<a href="/why-cayenne.html">Why Cayenne?</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/success-stories.html">Success Stories</a>
</li>
<li>
<a href="/about/support/">Support</a>
</li>
</ul>
</div>
<div class="col-sm-6 col-lg-3">
<h4>Documentation</h4>
<ul class="list-unstyled">
<li>
<a href="/docs/4.0/getting-started-guide/">Getting Started (4.0)</a>
</li>
<li>
<a href="/docs/4.1/getting-started-guide/">Getting Started (4.1)</a>
</li>
<li>
<a href="/docs/4.2/getting-started-guide/">Getting Started (4.2)</a>
</li>
<li>
<a href="/docs/4.0/cayenne-guide/">Cayenne Guide (4.0)</a>
</li>
<li>
<a href="/docs/4.1/cayenne-guide/">Cayenne Guide (4.1)</a>
</li>
<li>
<a href="/docs/4.2/cayenne-guide/">Cayenne Guide (4.2)</a>
</li>
<li>
<a href="/docs/4.1/getting-started-db-first/">Database First tutorial (4.1)</a>
</li>
<li>
<a href="/docs/4.2/getting-started-db-first/">Database First tutorial (4.2)</a>
</li>
<li>
<a href="/legacy/legacy-docs/">Legacy Documentation</a>
</li>
</ul>
</div>
<div class="col-sm-6 col-lg-3">
<h4>Collaboration</h4>
<ul class="list-unstyled">
<li>
<a href="https://issues.apache.org/jira/browse/CAY">Bug/Feature Tracker</a>
</li>
<li>
<a href="/mailing-lists.html">Mailing Lists</a>
</li>
<li>
<a href="/dev/code-repository.html">Code Repository</a>
</li>
<li>
<a href="/dev/">Developer Guide</a>
</li>
<li>
<a href="/how-can-i-help.html">How can I help?</a>
</li>
<li>
<a href="/contributors.html">Contributors</a>
</li>
<li>
<a href="/thanks.html">Thanks</a>
</li>
</ul>
</div>
<div class="col-sm-6 col-lg-3">
<h4>News</h4>
<ul class="list-multiline-items list-unstyled mb-0">
<li>
<time datetime="2023-05-25 18:00:00 &#43;0300 &#43;0300" class="xsmall d-block">May 25, 2023</time>
<a href="/2023/05/cayenne-42-final-released/">Cayenne 4.2 Final Released</a>
</li>
<li>
<time datetime="2023-03-02 12:00:00 &#43;0300 &#43;0300" class="xsmall d-block">Mar 02, 2023</time>
<a href="/2023/03/cayenne-403-released/">Cayenne 4.0.3 Released</a>
</li>
<li>
<time datetime="2022-12-05 12:00:00 &#43;0300 &#43;0300" class="xsmall d-block">Dec 05, 2022</time>
<a href="/2022/12/cayenne-42rc2-released/">Cayenne 4.2 Release Candidate 2 Released</a>
</li>
</ul>
<a class="btn-link text-uppercase xsmall" href="https://cayenne.apache.org/news">
More news
<i class="fa fa-lg fa-long-arrow-right" aria-hidden="true"></i>
</a>
</div>
</div>
<hr class="mt-0 mb-3" />
<p class="copy xsmall text-center mw-75 mx-auto mb-0">
Copyright © 2001-2024 Apache Software Foundation. Apache Cayenne, Cayenne, Apache, the Apache feather logo, and the Apache Cayenne project logo are trademarks of The Apache Software Foundation.
<a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a>.
<img class="d-block mx-auto mt-2" src="/img/logo_mono-3302daa3cf.svg" alt="Apache Cayenne" />
</p>
</div>
</footer>
</body>
</html>