Berkeley DB XML
version 2.5.16

Interface SecondaryMultiKeyCreator

public interface SecondaryMultiKeyCreator

The interface implemented for extracting multi-valued secondary keys from primary records.

The key creator object is specified by calling SecondaryConfig.setMultiKeyCreator. The secondary database configuration is specified when calling Environment.openSecondaryDatabase.

For example:

    class MyMultiKeyCreator implements SecondaryMultiKeyCreator {
    public void createSecondaryKeys(SecondaryDatabase secondary,
                                        DatabaseEntry key,
                                        DatabaseEntry data,
                                        Set results)
            throws DatabaseException {
            // DO HERE: Extract the secondary keys from the primary key and
            // data.  For each key extracted, create a DatabaseEntry and add it
            // to the results set.
    SecondaryConfig secConfig = new SecondaryConfig();
    secConfig.setMultiKeyCreator(new MyMultiKeyCreator());
    // Now pass secConfig to Environment.openSecondaryDatabase

Use this interface when any number of secondary keys may be present in a single primary record, in other words, for many-to-many and one-to-many relationships. When only zero or one secondary key is present (for many-to-one and one-to-one relationships) you may use the SecondaryKeyCreator interface instead. The table below summarizes how to create all four variations of relationships.

Relationship Interface Duplicates Example
One-to-one SecondaryKeyCreator No A person record with a unique social security number key.
Many-to-one SecondaryKeyCreator Yes A person record with a non-unique employer key.
One-to-many SecondaryMultiKeyCreator No A person record with multiple unique email address keys.
Many-to-many SecondaryMultiKeyCreator Yes A person record with multiple non-unique organization keys.

To configure a database for duplicates. pass true to DatabaseConfig.setSortedDuplicates(boolean).

Note that SecondaryMultiKeyCreator may also be used for single key secondaries (many-to-one and one-to-one); in this case, at most a single key is added to the results set. SecondaryMultiKeyCreator is only slightly less efficient than SecondaryKeyCreator in that two or three temporary sets must be created to hold the results.

See Also:

Method Summary
 void createSecondaryKeys(SecondaryDatabase secondary, DatabaseEntry key, DatabaseEntry data, Set results)
          Creates a secondary key entry, given a primary key and data entry.

Method Detail


void createSecondaryKeys(SecondaryDatabase secondary,
                         DatabaseEntry key,
                         DatabaseEntry data,
                         Set results)
                         throws DatabaseException
Creates a secondary key entry, given a primary key and data entry.

A secondary key may be derived from the primary key, primary data, or a combination of the primary key and data. Zero or more secondary keys may be derived from the primary record and returned in the results parameter. To ensure the integrity of a secondary database the key creator method must always return the same results for a given set of input parameters.

secondary - the database to which the secondary key will be added. This parameter is passed for informational purposes but is not commonly used.

key - the primary key entry. This parameter must not be modified by this method.

data - the primary data entry. This parameter must not be modified by this method.

results - the set to contain the the secondary key DatabaseEntry objects created by this method.

DatabaseException - if an error occurs attempting to create the secondary key.

Berkeley DB XML
version 2.5.16

Copyright (c) 1996,2009 Oracle. All rights reserved.