Search in sources :

Example 1 with CompositeNestedGeneratedValueGenerator

use of org.hibernate.id.CompositeNestedGeneratedValueGenerator in project hibernate-orm by hibernate.

the class Component method buildIdentifierGenerator.

private IdentifierGenerator buildIdentifierGenerator(IdentifierGeneratorFactory identifierGeneratorFactory, Dialect dialect, String defaultCatalog, String defaultSchema, RootClass rootClass) throws MappingException {
    final boolean hasCustomGenerator = !DEFAULT_ID_GEN_STRATEGY.equals(getIdentifierGeneratorStrategy());
    if (hasCustomGenerator) {
        return super.createIdentifierGenerator(identifierGeneratorFactory, dialect, defaultCatalog, defaultSchema, rootClass);
    }
    final Class entityClass = rootClass.getMappedClass();
    // what class is the declarer of the composite pk attributes
    final Class attributeDeclarer;
    CompositeNestedGeneratedValueGenerator.GenerationContextLocator locator;
    //		various scenarios for which we need to account here
    if (rootClass.getIdentifierMapper() != null) {
        // we have the @IdClass / <composite-id mapped="true"/> case
        attributeDeclarer = resolveComponentClass();
    } else if (rootClass.getIdentifierProperty() != null) {
        // we have the "@EmbeddedId" / <composite-id name="idName"/> case
        attributeDeclarer = resolveComponentClass();
    } else {
        // we have the "straight up" embedded (again the hibernate term) component identifier
        attributeDeclarer = entityClass;
    }
    locator = new StandardGenerationContextLocator(rootClass.getEntityName());
    final CompositeNestedGeneratedValueGenerator generator = new CompositeNestedGeneratedValueGenerator(locator);
    Iterator itr = getPropertyIterator();
    while (itr.hasNext()) {
        final Property property = (Property) itr.next();
        if (property.getValue().isSimpleValue()) {
            final SimpleValue value = (SimpleValue) property.getValue();
            if (DEFAULT_ID_GEN_STRATEGY.equals(value.getIdentifierGeneratorStrategy())) {
                // the StandardGenerationContextLocator
                continue;
            }
            final IdentifierGenerator valueGenerator = value.createIdentifierGenerator(identifierGeneratorFactory, dialect, defaultCatalog, defaultSchema, rootClass);
            generator.addGeneratedValuePlan(new ValueGenerationPlan(valueGenerator, injector(property, attributeDeclarer)));
        }
    }
    return generator;
}
Also used : CompositeNestedGeneratedValueGenerator(org.hibernate.id.CompositeNestedGeneratedValueGenerator) JoinedIterator(org.hibernate.internal.util.collections.JoinedIterator) Iterator(java.util.Iterator) IdentifierGenerator(org.hibernate.id.IdentifierGenerator)

Aggregations

Iterator (java.util.Iterator)1 CompositeNestedGeneratedValueGenerator (org.hibernate.id.CompositeNestedGeneratedValueGenerator)1 IdentifierGenerator (org.hibernate.id.IdentifierGenerator)1 JoinedIterator (org.hibernate.internal.util.collections.JoinedIterator)1