Author: aadamchik
Date: Sat Sep 8 09:25:40 2012
New Revision: 1382268
URL: http://svn.apache.org/viewvc?rev=1382268&view=rev
Log:
docs
generic objects
(cherry picked from commit 9c5b43f17c3075a0d9bc8d3ceb378f0dfcd61ab3)
Modified:
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/cayennemodeler-application.xml
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/persistent-objects-objectcontext.xml
Modified:
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/cayennemodeler-application.xml
URL:
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/cayennemodeler-application.xml?rev=1382268&r1=1382267&r2=1382268&view=diff
==============================================================================
---
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/cayennemodeler-application.xml
(original)
+++
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/cayennemodeler-application.xml
Sat Sep 8 09:25:40 2012
@@ -20,6 +20,22 @@
<section xml:id="modeling-inheritance">
<title>Modeling Inheritance</title>
</section>
+ <section xml:id="generating-java-classes">
+ <title>Modeling Generic Persistent Classes</title>
+ <para>Normally each ObjEntity is mapped to a specific Java
class (such as Artist or
+ Painting) that explicitly declare all entity properties
as pairs of getters and setters.
+ However Cayenne allows to map a completly generic class
to any number of entities. The
+ only expectation is that a generic class implements
+
<emphasis>org.apache.cayenne.DataObject</emphasis>. So an ideal candidate for a
+ generic class is CayenneDataObject, or some custom
subclass of CayenneDataObject.</para>
+ <para>If you don't enter anything for Java Class of an
ObjEntity, Cayenne assumes generic
+ mapping and uses the following implicit rules to
determine a class of a generic object.
+ If DataMap "Custom Superclass" is set, runtime uses
this class to instantiate new
+ objects. If not, org.apache.cayenne.CayenneDataObject
is used.</para>
+ <para>Class generation procedures (either done in the Modeler
or with Ant or Maven) would
+ skip entities that are mapped to CayenneDataObject
explicitly or have no class
+ mapping.</para>
+ </section>
<section xml:id="modeling-pk-generation-strategy">
<title>Modeling Primary Key Generation Strategy</title>
</section>
Modified:
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/persistent-objects-objectcontext.xml
URL:
http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/persistent-objects-objectcontext.xml?rev=1382268&r1=1382267&r2=1382268&view=diff
==============================================================================
---
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/persistent-objects-objectcontext.xml
(original)
+++
cayenne/main/branches/STABLE-3.1/docs/docbook/cayenne-guide/src/docbkx/persistent-objects-objectcontext.xml
Sat Sep 8 09:25:40 2012
@@ -205,6 +205,27 @@ nested.rollbackChanges();</programlistin
</section>
<section xml:id="generic-persistent-objects">
<title>Generic Persistent Objects</title>
+ <para>As described in the CayenneModeler chapter, Cayenne
supports mapping of completely
+ generic classes to specific entities. Although for
conveniece most applications should
+ stick with entity-specific class mappings, the generic
feature offers some interesting
+ possibilities, such as creating mappings completely on
the fly in a running application,
+ etc.</para>
+ <para>Generic objects are first class citizens in Cayenne, and
all common persistent
+ operations apply to them as well. There are some
pecularities however, described
+ below.</para>
+ <para>When creating a new generic object, either cast your
ObjectContext to DataContext
+ (that provides "newObject(String)" API), or provide
your object with an explicit
+ ObjectId:<programlisting>DataObject generic =
((DataContext)
context).newObject("GenericEntity");</programlisting><programlisting>DataObject
generic = new CayenneDataObject();
+generic.setObjectId(new ObjectId("GenericEntity"));
+context.registerNewObject(generic);</programlisting>SelectQuery
+ for generic object should be created passing entity
name String in constructor, instead
+ of a Java
+ class:<programlisting>SelectQuery query = new
SelectQuery("GenericEntity");</programlisting>Use
+ DataObject API to access and modify properties of a
generic
+ object:<programlisting>String name = (String)
generic.readProperty("name");
+generic.writeProperty("name", "New Name");</programlisting>This
+ is how an application can obtain entity name of a
generic
+ object:<programlisting>String entityName =
generic.getObjectId().getEntityName();</programlisting></para>
</section>
<section xml:id="transactions">
<title>Transactions</title>