Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2e9c43658e374d290a2de15d25134ac8 > files > 520

db4o-doc-8.0-1.fc15.i686.rpm

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:lastBlockDepth="2" MadCap:lastHeight="120" MadCap:lastWidth="624" MadCap:disableMasterStylesheet="true" MadCap:tocPath="Basics Operations &amp; Concepts|Identity Concept" MadCap:InPreviewMode="false" MadCap:RuntimeFileType="Topic" MadCap:TargetType="WebHelp" MadCap:PathToHelpSystem="../../../" MadCap:HelpSystemFileName="index.xml" MadCap:SearchType="Stem">
    <head><title>Identity Vs Equality</title>
        <script type="text/javascript">/* <![CDATA[ */
window.onload = function(){
	var pathToFlash = $('html').attr('MadCap:PathToHelpSystem') + 'Content/Resources/Code/ZeroClipboard.swf';
	ZeroClipboard.setMoviePath(pathToFlash);
			
	function bindToClipBord(element,content){
		var clip = new ZeroClipboard.Client();
		clip.setText(content);
		clip.glue(element);
	};
		
	if(location.protocol==='file:'){
		$('.copylink-marker').remove();
	} else{
			$('.copylink-marker').each(function(){
				var text = $(this).parent().parent().children('.prettyprint').html();
				$(this).hover(function(){
					bindToClipBord(this,text);
				},
				function(){});
			});	
	}		
	prettyPrint();	
};
                /* ]]> */</script>
        <link href="../../SkinSupport/MadCap.css" rel="stylesheet" />
        <link href="../../Resources/Stylesheets/OnlineStyle.css" rel="stylesheet" />
        <script src="../../SkinSupport/MadCapAll.js">
        </script>
        <script src="../../Resources/Code/prettify.js">
        </script>
        <script src="../../Resources/Code/lang-vb.js">
        </script>
        <script src="../../Resources/Code/jquery.min.js">
        </script>
        <script src="../../Resources/Code/ZeroClipboard.js">
        </script>
    </head>
    <body>
        <p class="MCWebHelpFramesetLink" style="display: none;"><a href="../../../index_CSH.html#basics/indentity_concept/identity_vs_equals.htm" style="">Open topic with navigation</a>
        </p>
        <div class="MCBreadcrumbsBox"><span class="MCBreadcrumbsPrefix">You are here: </span><a class="MCBreadcrumbsLink" href="../../basics.htm">Basics Operations &amp; Concepts</a><span class="MCBreadcrumbsDivider"> &gt; </span><a class="MCBreadcrumbsLink" href="../identity_concept.htm">Identity Concept</a><span class="MCBreadcrumbsDivider"> &gt; </span><span class="MCBreadcrumbs">Identity Vs Equality</span>
        </div>
        <p>
            <script type="text/javascript">/*<![CDATA[*/document.write('<a href="' + location.href +'">');
				document.write("Direct Link");
			document.write('</a>');/*]]>*/</script>
        </p>
        <p>
        </p>
        <h1>Identity Vs Equality</h1>
        <p>One of the most common questions is why db4o  doesn't allow to use equals and hash code to identify objects in the
database. From the first glance it seems like a very attractive idea to let
the developer decide what should be the base for comparing objects and making
them unique in the database. For example if the database identity is based on
the object's field values it will prevent duplicate objects from being stored
to the database, as they will automatically be considered one object.</p>
        <p>Yes, it looks attractive, but there is a huge pitfall: When
we deal with objects, we deal with their references to each other comprising a
unique object graph, which can be very complex. Preserving these references
becomes a task of storing many-to-many relationships. This task can only be
solved by providing unique identification to each object in memory and not only in the database, which means that it can't
depend on the information stored in the object (like an aggregate of field values).</p>
        <p>To see it clearly, let's look at an example. Suppose we have
a Pilot and a Car class and their equals-method is based on comparing field values:</p>
        <ol>
            <li value="1">Store
     a pilot with the name 'Joe' and a car with that pilot in the database</li>
            <li value="2">Retrieve
     the pilot.</li>
            <li value="3">Change the
     pilot-name from 'Joe' to 'John'. Note that though it is the
     same object from the runtime point of view, these are two different objects for
     the database based on equals comparison.</li>
            <li value="4">Now what happens when we load the pilot. Should it return a pilot with the original name 'Joe'. Or the update pilot with the 'John'? What happens if there are hundreds of pilots witch had a pilot with the name 'Joe'. Do all those cars return the new Pilot name? Or the old one? How do you update only the name of a Pilot for only one car?</li>
        </ol>
        <p>This questions shows that the update-issue is not solvable when the database manages objects by equality. Objects without identity also make Transparent Persistence
and <span class="MCPopup"><a href="javascript:void(0);" class="MCPopupSpot" onclick="FMCPopup( event, this ); return false;" MadCap:src="../activation.htm">Activation<img style="border: none;margin-left: 5px;" src="../../SkinSupport/ExpandingClosed.gif" MadCap:altsrc="../../SkinSupport/ExpandingOpen.gif" class="MCExpandingIcon" onload="if ( typeof( FMCPreloadImage ) == 'function' ) { FMCPreloadImage( '../../SkinSupport/ExpandingOpen.gif' ); }" /></a></span> impossible, as there will be no way to decide which instance is
the right one for update or activation.</p>
        <p>So unique identification of database objects in memory is
unavoidable and identity based on an object reference is the most
straightforward way to get this identification.</p>
        <script type="text/javascript" src="../../SkinSupport/MadCapBodyEnd.js">
        </script>
    </body>
</html>