This is probably the most frequently asked question on this list. So I
figured it is time to write the docs for it. Here is an unformatted
version of this page. It will be included in 1.0.4 release docs.
Andrus
Normally it is not advisable to map primary and foreign key columns (PK
and FK) as Java class properties (ObjAttributes). When reverse
engineering of the database is done using CayenneModeler, produced
mapping will reflect that - PKs and FKs will not be included in the
Java class. However sometimes the application requires access to these
values. Cayenne provides an easy way to do that by creating custom get*
methods in the DataObject subclass. Lets take a Painting class as an
example. The following code is generated by CayenneModeler:
package org.objectstyle.art;
public class Painting extends org.objectstyle.art.auto._Painting {
}
package org.objectstyle.art.auto;
/** Class _Painting was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public class _Painting extends org.objectstyle.art.ArtDataObject {
public static final String ESTIMATED_PRICE_PROPERTY =
"estimatedPrice";
public static final String PAINTING_TITLE_PROPERTY =
"paintingTitle";
public static final String TO_ARTIST_PROPERTY = "toArtist";
public static final String TO_GALLERY_PROPERTY = "toGallery";
public static final String TO_PAINTING_INFO_PROPERTY =
"toPaintingInfo";
public static final String PAINTING_ID_PK_COLUMN = "PAINTING_ID";
public void setEstimatedPrice(java.math.BigDecimal estimatedPrice) {
writeProperty("estimatedPrice", estimatedPrice);
}
public java.math.BigDecimal getEstimatedPrice() {
return (java.math.BigDecimal)readProperty("estimatedPrice");
}
public void setPaintingTitle(String paintingTitle) {
writeProperty("paintingTitle", paintingTitle);
}
public String getPaintingTitle() {
return (String)readProperty("paintingTitle");
}
...
}
The following custom methods should be added to the Painting class to
access the value of ARTIST_ID and PAINTING_ID:
Note:
If you perform class generation using Ant, you can customize class
generation templates to generte these methods for you. Eventually
CayenneModeler will support this too as optional functionality.
package org.objectstyle.art;
public class Painting extends org.objectstyle.art.auto._Painting {
/** Read-only access to PK */
public Integer getPaintingId() {
return (getObjectId() != null && !getObjectId().isTemporary())
?
(Integer)getObjectId().getIdSnapshot().get(PAINTING_ID_PK_COLUMN)
: null;
}
/** Read-only access to FK */
public Integer getArtistId() {
Artist artist = getArtist();
return (artist != null)
?
(Integer)artist.getObjectId().getIdSnapshot().get(Artist.ARTIST_ID_PK_CO
LUMN)
: null;
}
}
This archive was generated by hypermail 2.0.0 : Fri Nov 28 2003 - 02:52:30 EST