Know When to Use Compound Primary Keys
If you decide to write a compound primary
key class for an entity bean, you must override the
hashCode( ) and equals( )
methods. It is also common practice to override the
toString( ) method for debugging purposes.
Overriding hashCode( ) and equals( ) is important because the container uses these methods to
compare primary keys and to look up cached entity bean instances.
Implementing the equals( ) method is pretty
simple—all you have to do is compare various components of the
primary key. On the other hand, implementing hashCode( ) is harder because a poorly implemented hashCode( ) method can slow down entity bean lookups, especially if
there are a lot of instantiated beans. This happens because
application servers use
HashMap-type
structures to store primary keys, and the performance of these
structures relies on the fact that hashCode( )
returns different values for different objects.
In most cases, the implementation of hashCode( )
should depend on the data that the primary key contains. However,
there are a few generic algorithms that work well. The one shown in
Example 2-3 is taken from the
java.util.List.hashCode( )
method. This algorithm simply adds all hashcodes of the primary key
fields, multiplying each intermediate result by 31 (so that
it’s not a simple sum of hashcodes).
public class CompoundPK implements Serializable { private String str1; private String str2; private int int1; private ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access