Secondary Tables

The EJB specification allows you to map an entity bean to multiple tables. You do this by using the @SecondaryTable annotation.

The Customer bean maps its address properties to a separate ADDRESS table. The first thing it does is define the secondary table.

@Entity
@Table(name = "CUSTOMER")
@SecondaryTable(name = "EMBEDDED_ADDRESS", join = {@JoinColumn(name = "ADDRESS_ID")})
public class Customer implements java.io.Serializable
{

The @JoinColumn of the secondary table must match the value of the Customer's primary key.

To map individual properties to a secondary table you use the secondaryTable member value of @Column.

   @Column(name = "STREET", secondaryTable = "EMBEDDED_ADDRESS")
   public String getStreet()
   {
      return street;
   }

Building and Running

To build and run the example, make sure you have ejb3.deployer installed in JBoss 4.0.x and have JBoss running. See the reference manual on how to install EJB 3.0.
Unix:    $ export JBOSS_HOME=<where your jboss 4.0 distribution is>
Windows: $ set JBOSS_HOME=<where your jboss 4.0 distribution is>
$ ant
$ ant run

run:
     [java] Create Bill Burke and Monica Smith
     [java] 2004-10-06 22:27:50,344 INFO org.jboss.remoting.InvokerRegistry[main] - Failed to load soap remoting transpo
rt: org/apache/axis/AxisFault
     [java] Bill and Monica get married
     [java] Get all the Burkes
     [java] There are now 2 Burkes

The INFO message you can ignore. It will be fixed in later releases of JBoss 4.0.

View the tables and rows

You can view the tables created by JBoss by going to the Hypersonic SQL service, scrolling down to the startDatabaseManager button and clicking it. A Hypersonic SQL window will be minimized, but you can open it up to look at the tables and do queries.

Jar structure

EJB 3.0 beans must be packaged in a JAR file with the suffix .jar. Running the ant script above creates a JAR file within the deploy/ directory of JBoss. All that needs to be in that jar is your server-side class files and additionally, you will probably need to define a hibernate.properties file in the META-INF directory of the JAR. hibernate.properties is needed if you need to hook in a datasource other than JBoss's DefaultDS, or change the caching of Hibernate. See the EJB 3.0 reference manual and Hibernate reference manual for more details.f