## org.hibernate.id
Class CompositeNestedGeneratedValueGenerator

    java.lang.Object
      org.hibernate.id.CompositeNestedGeneratedValueGenerator

All Implemented Interfaces:
  Serializable, IdentifierGenerator, IdentifierGeneratorAggregator

    public class CompositeNestedGeneratedValueGenerator

extends Object
implements IdentifierGenerator, Serializable, IdentifierGeneratorAggregator

For composite identifiers, defines a number of "nested" generations that need to happen to "fill" the identifier property(s).

This generator is used implicitly for all composite identifier scenarios if an explicit generator is not in place. So it make sense to discuss the various potential scenarios:

- "embedded" composite identifier - this is possible only in HBM mappings as `<composite-id/>` (notice the lack of both a name and class attribute declarations). The term `"embedded"` here refers to the Hibernate usage which is actually the exact opposite of the JPA meaning of "embedded". Essentially this means that the entity class itself holds the named composite pk properties. This is very similar to the JPA `@IdClass` usage, though without a separate pk-class for loading.
- pk-class as entity attribute - this is possible in both annotations (`@EmbeddedId`) and HBM mappings (`<composite-id name="idAttributeName" class="PkClassName"/>`)
- "embedded" composite identifier with a pk-class - this is the JPA `@IdClass` use case and is only possible in annotations

Most of the grunt work is done in `Component`.

See Also:
  Serialized Form

Nested Class Summary
`static interface` `CompositeNestedGeneratedValueGenerator.GenerationContextLocator` Contract for declaring how to locate the context for sub-value injection.
`static interface` `CompositeNestedGeneratedValueGenerator.GenerationPlan` Contract for performing the actual sub-value generation, usually injecting it into the determined `context`

Field Summary

Fields inherited from interface org.hibernate.id.IdentifierGenerator
`ENTITY_NAME`

Constructor Summary
`CompositeNestedGeneratedValueGenerator(CompositeNestedGeneratedValueGenerator.GenerationContextLocator generationContextLocator)`

Method Summary
`void` `addGeneratedValuePlan(CompositeNestedGeneratedValueGenerator.GenerationPlan plan)`
`Serializable` `generate(SessionImplementor session, Object object)` Generate a new identifier.
`void` `registerPersistentGenerators(Map generatorMap)` Register any sub generators which implement `PersistentIdentifierGenerator` by their `generatorKey`.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### CompositeNestedGeneratedValueGenerator

    public CompositeNestedGeneratedValueGenerator(CompositeNestedGeneratedValueGenerator.GenerationContextLocator generationContextLocator)

Method Detail

### addGeneratedValuePlan

    public void addGeneratedValuePlan(CompositeNestedGeneratedValueGenerator.GenerationPlan plan)

### generate

    public Serializable generate(SessionImplementor session,
                                 Object object)
                          throws HibernateException

  Description copied from interface: `IdentifierGenerator`
  Generate a new identifier.

  Specified by:
    `generate` in interface `IdentifierGenerator`
    `object` - the entity or toplevel collection for which the id is being generated
  Returns:
    a new identifier
  Throws:
    `HibernateException`

### registerPersistentGenerators

    public void registerPersistentGenerators(Map generatorMap)

  Register any sub generators which implement `PersistentIdentifierGenerator` by their `generatorKey`.

  Specified by:
    `registerPersistentGenerators` in interface `IdentifierGeneratorAggregator`
  Parameters:
    `generatorMap` - The map of generators.

Copyright © 2001-2012 Red Hat, Inc. All Rights Reserved.