Download PDF Home History |  | API Search Feedback FAQ

> ## Primary Keys for Container-Managed Persistence

> Sometimes you must implement the class and package it along with the entity bean. For example, if your entity bean requires a composite primary key (which is made up of multiple fields) or if a primary key field is a Java programming language primitive type, then you must provide a customized primary key class.

> ### The Primary Key Class

> For container-managed persistence, a primary key class must meet the following requirements:

> - The access control modifier of the class must be `public`.
> - All fields must be declared as `public`.
> - The fields must be a subset of the bean's persistent fields.
> - The class must have a public default constructor.
> - The class must implement the `hashCode()` and `equals(Object other)` methods.
> - The class must be serializable.

> In the following example, the `PurchaseOrderKey` class implements a composite key for the `PurchaseOrderBean` entity bean. The key is composed of two fields--`productModel` and `vendorId`--whose names must match two of the persistent fields in the entity bean class.

>     public class PurchaseOrderKey implements java.io.Serializable {

>       public String productModel;
>       public String vendorId;

>       public PurchaseOrderKey() { };

>       public boolean equals(Object other) {

>         if (other instanceof PurchaseOrderKey) {
>           return (productModel.equals(
>               ((PurchaseOrderKey)other).productModel) &&
>               vendorId.equals(
>               ((PurchaseOrderKey)other).vendorId));
>         }
>         return false;
>       }

>       public int hashCode() {

>         return productModel.concat(vendorId).hashCode();
>       }
>     }

> #### Primary Keys in the Entity Bean Class

> In the `PurchaseOrderBean` class, the following access methods define the persistent fields (`vendorId` and `productModel`) that make up the primary key:

>     public abstract String getVendorId();
>     public abstract void setVendorId(String id);

>     public abstract String getProductModel();
>     public abstract void setProductModel(String name);

> The next code sample shows the `ejbCreate` method of the `PurchaseOrderBean` class. The return type of the `ejbCreate` method is the primary key, but the return value is `null`. Although it is not required, the `null` return value is recommended for container-managed persistence. This approach saves overhead because the bean does not have to instantiate the primary key class for the return value.

>     public PurchaseOrderKey ejbCreate (String vendorId,
>         String productModel, String productName)
>         throws CreateException {

>         setVendorId(vendorId);
>         setProductModel(productModel);
>         setProductName(productName);

>         return null;
>     }

> #### Generating Primary Key Values

> For some entity beans, the value of a primary key has a meaning for the business entity. For example, in an entity bean that represents a player on a sports team, the primary key might be the player's driver's license number. But for other beans, the key's value is arbitrary, provided that it's unique. With container-managed persistence, these key values can be generated automatically by the EJB container. To take advantage of this feature, an entity bean must meet these requirements:

> - In the deployment descriptor, the primary key class must be defined as a `java.lang.Object`. The primary key field is not specified.
> - In the home interface, the argument of the `findByPrimaryKey` method must be a `java.lang.Object`.
> - In the entity bean class, the return type of the `ejbCreate` method must be a `java.lang.Object`.

> In these entity beans, the primary key values are in an internal field that only the EJB container can access. You cannot associate the primary key with a persistent field or any other instance variable. However, you can fetch the bean's primary key by invoking the `getPrimaryKey` method on the bean reference, and you can locate the bean by invoking its `findByPrimaryKey` method.

Download PDF Home History |  | API Search Feedback FAQ

All of the material in The J2EE(TM) 1.4 Tutorial is copyright-protected and may not be published in other works without express written permission from Sun Microsystems.