stasis/je-7.5.11/docs/java/com/sleepycat/je/SecondaryKeyCreator.html

343 lines
16 KiB
HTML
Raw Normal View History

2019-06-25 20:12:40 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_151) on Tue Oct 31 17:36:46 EDT 2017 -->
<title>SecondaryKeyCreator (Oracle - Berkeley DB Java Edition API)</title>
<meta name="date" content="2017-10-31">
<link rel="stylesheet" type="text/css" href="../../../style.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SecondaryKeyCreator (Oracle - Berkeley DB Java Edition API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SecondaryKeyCreator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><b>Berkeley DB Java Edition</b><br><font size=\"-1\"> version 7.5.11</font>
</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/sleepycat/je/SecondaryIntegrityException.html" title="class in com.sleepycat.je"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/sleepycat/je/SecondaryMultiKeyCreator.html" title="interface in com.sleepycat.je"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/sleepycat/je/SecondaryKeyCreator.html" target="_top">Frames</a></li>
<li><a href="SecondaryKeyCreator.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.sleepycat.je</div>
<h2 title="Interface SecondaryKeyCreator" class="title">Interface SecondaryKeyCreator</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../com/sleepycat/bind/serial/SerialSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">SerialSerialKeyCreator</a>, <a href="../../../com/sleepycat/bind/serial/TupleSerialKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialKeyCreator</a>, <a href="../../../com/sleepycat/bind/serial/TupleSerialMarshalledKeyCreator.html" title="class in com.sleepycat.bind.serial">TupleSerialMarshalledKeyCreator</a>, <a href="../../../com/sleepycat/bind/tuple/TupleTupleKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleKeyCreator</a>, <a href="../../../com/sleepycat/bind/tuple/TupleTupleMarshalledKeyCreator.html" title="class in com.sleepycat.bind.tuple">TupleTupleMarshalledKeyCreator</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">SecondaryKeyCreator</span></pre>
<div class="block">The interface implemented for extracting single-valued secondary keys from
primary records.
<p>The key creator object is specified by calling <a href="../../../com/sleepycat/je/SecondaryConfig.html#setKeyCreator-com.sleepycat.je.SecondaryKeyCreator-"><code>SecondaryConfig.setKeyCreator</code></a>. The secondary
database configuration is specified when calling <a href="../../../com/sleepycat/je/Environment.html#openSecondaryDatabase-com.sleepycat.je.Transaction-java.lang.String-com.sleepycat.je.Database-com.sleepycat.je.SecondaryConfig-"><code>Environment.openSecondaryDatabase</code></a>.</p>
<p>For example:</p>
<pre>
class MyKeyCreator implements SecondaryKeyCreator {
public boolean createSecondaryKey(SecondaryDatabase secondary,
DatabaseEntry key,
DatabaseEntry data,
DatabaseEntry result) {
//
// DO HERE: Extract the secondary key from the primary key and
// data, and set the secondary key into the result parameter.
//
return true;
}
}
...
SecondaryConfig secConfig = new SecondaryConfig();
secConfig.setKeyCreator(new MyKeyCreator());
// Now pass secConfig to Environment.openSecondaryDatabase
</pre>
<p>Use this interface when zero or one secondary key is present in a single
primary record, in other words, for many-to-one and one-to-one
relationships. When more than one secondary key may be present (for
many-to-many and one-to-many relationships), use the <a href="../../../com/sleepycat/je/SecondaryMultiKeyCreator.html" title="interface in com.sleepycat.je"><code>SecondaryMultiKeyCreator</code></a> interface instead. The table below summarizes how
to create all four variations of relationships.</p>
<div>
<table border="yes">
<tr><th>Relationship</th>
<th>Interface</th>
<th>Duplicates</th>
<th>Example</th>
</tr>
<tr><td>One-to-one</td>
<td><a href="../../../com/sleepycat/je/SecondaryKeyCreator.html" title="interface in com.sleepycat.je"><code>SecondaryKeyCreator</code></a></td>
<td>No</td>
<td>A person record with a unique social security number key.</td>
</tr>
<tr><td>Many-to-one</td>
<td><a href="../../../com/sleepycat/je/SecondaryKeyCreator.html" title="interface in com.sleepycat.je"><code>SecondaryKeyCreator</code></a></td>
<td>Yes</td>
<td>A person record with a non-unique employer key.</td>
</tr>
<tr><td>One-to-many</td>
<td><a href="../../../com/sleepycat/je/SecondaryMultiKeyCreator.html" title="interface in com.sleepycat.je"><code>SecondaryMultiKeyCreator</code></a></td>
<td>No</td>
<td>A person record with multiple unique email address keys.</td>
</tr>
<tr><td>Many-to-many</td>
<td><a href="../../../com/sleepycat/je/SecondaryMultiKeyCreator.html" title="interface in com.sleepycat.je"><code>SecondaryMultiKeyCreator</code></a></td>
<td>Yes</td>
<td>A person record with multiple non-unique organization keys.</td>
</tr>
</table>
</div>
<p>To configure a database for duplicates. pass true to <a href="../../../com/sleepycat/je/DatabaseConfig.html#setSortedDuplicates-boolean-"><code>DatabaseConfig.setSortedDuplicates(boolean)</code></a>.</p>
<p><em>WARNING:</em> Key creator instances are shared by multiple threads
and key creator methods are called without any special synchronization.
Therefore, key creators must be thread safe. In general no shared state
should be used and any caching of computed values must be done with proper
synchronization.</p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/sleepycat/je/SecondaryKeyCreator.html#createSecondaryKey-com.sleepycat.je.SecondaryDatabase-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.DatabaseEntry-">createSecondaryKey</a></span>(<a href="../../../com/sleepycat/je/SecondaryDatabase.html" title="class in com.sleepycat.je">SecondaryDatabase</a>&nbsp;secondary,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;key,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;data,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;result)</code>
<div class="block">Creates a secondary key entry, given a primary key and data entry.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="createSecondaryKey-com.sleepycat.je.SecondaryDatabase-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.DatabaseEntry-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>createSecondaryKey</h4>
<pre>boolean&nbsp;createSecondaryKey(<a href="../../../com/sleepycat/je/SecondaryDatabase.html" title="class in com.sleepycat.je">SecondaryDatabase</a>&nbsp;secondary,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;key,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;data,
<a href="../../../com/sleepycat/je/DatabaseEntry.html" title="class in com.sleepycat.je">DatabaseEntry</a>&nbsp;result)</pre>
<div class="block">Creates a secondary key entry, given a primary key and data entry.
<p>A secondary key may be derived from the primary key, primary data, or
a combination of the primary key and data. For secondary keys that are
optional, the key creator method may return false and the key/data pair
will not be indexed. To ensure the integrity of a secondary database
the key creator method must always return the same result for a given
set of input parameters.</p>
<p>A <code>RuntimeException</code> may be thrown by this method if an error
occurs attempting to create the secondary key. This exception will be
thrown by the API method currently in progress, for example, a <a href="../../../com/sleepycat/je/Database.html#put-com.sleepycat.je.Transaction-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.DatabaseEntry-com.sleepycat.je.Put-com.sleepycat.je.WriteOptions-"><code>put</code></a> method. However, this will cause the write operation
to be incomplete. When databases are not configured to be
transactional, caution should be used to avoid integrity problems. See
<a href="SecondaryDatabase.html#transactions">Special considerations for
using Secondary Databases with and without Transactions</a>.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>secondary</code> - the database to which the secondary key will be
added. This parameter is passed for informational purposes but is not
commonly used. This parameter is always non-null.</dd>
<dd><code>key</code> - the primary key entry. This parameter must not be modified
by this method. This parameter is always non-null.</dd>
<dd><code>data</code> - the primary data entry. This parameter must not be modified
by this method. If <code>SecondaryConfig#setExtractFromPrimaryKeyOnly</code>
is configured as <code>true</code>, the <code>data</code> param may be either null
or non-null, and the implementation is expected to ignore it; otherwise,
this parameter is always non-null.</dd>
<dd><code>result</code> - the secondary key created by this method. This parameter
is always non-null.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if a key was created, or false to indicate that the key is
not present.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/SecondaryKeyCreator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><b>Berkeley DB Java Edition</b><br><font size=\"-1\"> version 7.5.11</font>
</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/sleepycat/je/SecondaryIntegrityException.html" title="class in com.sleepycat.je"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/sleepycat/je/SecondaryMultiKeyCreator.html" title="interface in com.sleepycat.je"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/sleepycat/je/SecondaryKeyCreator.html" target="_top">Frames</a></li>
<li><a href="SecondaryKeyCreator.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><font size=1>Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.</font> </small></p>
</body>
</html>