<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>ProviderUtil</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>

<link rel="shortcut icon" href="/img/jakarta-favicon.ico">
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="ProviderUtil";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":6,"i1":6,"i2":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="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>
<div class="subNav">
<ul class="navList">
<li><a href="../../../jakarta/persistence/spi/PersistenceUnitTransactionType.html" title="enum in jakarta.persistence.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/persistence/spi/ProviderUtil.html" target="_top">Frames</a></li>
<li><a href="ProviderUtil.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">jakarta.persistence.spi</div>
<h2 title="Interface ProviderUtil" class="title">Interface ProviderUtil</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ProviderUtil</span></pre>
<div class="block">Utility interface implemented by the persistence provider.  This
 interface is invoked by the <a href="../../../jakarta/persistence/PersistenceUtil.html" title="interface in jakarta.persistence"><code>PersistenceUtil</code></a> implementation to determine
 the load status of an entity or entity attribute.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.0</dd>
</dl>
</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><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/persistence/spi/ProviderUtil.html#isLoaded-java.lang.Object-">isLoaded</a></span>(java.lang.Object&nbsp;entity)</code>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of all attributes for which
 <code>FetchType.EAGER</code> has been specified have been loaded, this 
 method returns <code>LoadState.LOADED</code>.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/persistence/spi/ProviderUtil.html#isLoadedWithoutReference-java.lang.Object-java.lang.String-">isLoadedWithoutReference</a></span>(java.lang.Object&nbsp;entity,
                        java.lang.String&nbsp;attributeName)</code>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of the specified attribute has
 been loaded, this method returns <code>LoadState.LOADED</code>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/persistence/spi/ProviderUtil.html#isLoadedWithReference-java.lang.Object-java.lang.String-">isLoadedWithReference</a></span>(java.lang.Object&nbsp;entity,
                     java.lang.String&nbsp;attributeName)</code>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of the specified attribute has
 been loaded, this method returns <code>LoadState.LOADED</code>.</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="isLoadedWithoutReference-java.lang.Object-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLoadedWithoutReference</h4>
<pre><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a>&nbsp;isLoadedWithoutReference(java.lang.Object&nbsp;entity,
                                   java.lang.String&nbsp;attributeName)</pre>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of the specified attribute has
 been loaded, this method returns <code>LoadState.LOADED</code>.
 <p> If the provider determines that the entity has been provided
 by itself and that either entity attributes with <code>FetchType.EAGER</code> 
 have not been loaded or that the state of the specified
 attribute has not been loaded, this methods returns
 <code>LoadState.NOT_LOADED</code>.
 <p> If a provider cannot determine the load state, this method
 returns <code>LoadState.UNKNOWN</code>.
 <p> The provider's implementation of this method must not obtain
 a reference to an attribute value, as this could trigger the
 loading of entity state if the entity has been provided by a
 different provider.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>entity</code> - entity instance</dd>
<dd><code>attributeName</code> - name of attribute whose load status is
        to be determined</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>load status of the attribute</dd>
</dl>
</li>
</ul>
<a name="isLoadedWithReference-java.lang.Object-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLoadedWithReference</h4>
<pre><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a>&nbsp;isLoadedWithReference(java.lang.Object&nbsp;entity,
                                java.lang.String&nbsp;attributeName)</pre>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of the specified attribute has
 been loaded, this method returns <code>LoadState.LOADED</code>.
 <p> If a provider determines that the entity has been provided
 by itself and that either the entity attributes with <code>FetchType.EAGER</code>
 have not been loaded or that the state of the specified
 attribute has not been loaded, this method returns
 return <code>LoadState.NOT_LOADED</code>.
 <p> If the provider cannot determine the load state, this method
 returns <code>LoadState.UNKNOWN</code>.
 <p> The provider's implementation of this method is permitted to
 obtain a reference to the attribute value.  (This access is
 safe because providers which might trigger the loading of the
 attribute state will have already been determined by
 <code>isLoadedWithoutReference</code>. )</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>entity</code> - entity instance</dd>
<dd><code>attributeName</code> - name of attribute whose load status is
        to be determined</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>load status of the attribute</dd>
</dl>
</li>
</ul>
<a name="isLoaded-java.lang.Object-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>isLoaded</h4>
<pre><a href="../../../jakarta/persistence/spi/LoadState.html" title="enum in jakarta.persistence.spi">LoadState</a>&nbsp;isLoaded(java.lang.Object&nbsp;entity)</pre>
<div class="block">If the provider determines that the entity has been provided
 by itself and that the state of all attributes for which
 <code>FetchType.EAGER</code> has been specified have been loaded, this 
 method returns <code>LoadState.LOADED</code>.
 <p> If the provider determines that the entity has been provided
 by itself and that not all attributes with <code>FetchType.EAGER</code> 
 have been loaded, this method returns <code>LoadState.NOT_LOADED</code>.
 <p> If the provider cannot determine if the entity has been
 provided by itself, this method returns <code>LoadState.UNKNOWN</code>.
 <p> The provider's implementation of this method must not obtain
 a reference to any attribute value, as this could trigger the
 loading of entity state if the entity has been provided by a
 different provider.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>entity</code> - whose loaded status is to be determined</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>load status of the entity</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="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>
<div class="subNav">
<ul class="navList">
<li><a href="../../../jakarta/persistence/spi/PersistenceUnitTransactionType.html" title="enum in jakarta.persistence.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/persistence/spi/ProviderUtil.html" target="_top">Frames</a></li>
<li><a href="ProviderUtil.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 ======= -->
</body>
</html>
