Search in sources :

Example 1 with SecondaryTable

use of javax.persistence.SecondaryTable in project CloudStack-archive by CloudStack-extras.

the class DbUtil method getSecondaryTables.

public static final SecondaryTable[] getSecondaryTables(AnnotatedElement clazz) {
    SecondaryTable[] sts = null;
    SecondaryTable stAnnotation = clazz.getAnnotation(SecondaryTable.class);
    if (stAnnotation == null) {
        SecondaryTables stsAnnotation = clazz.getAnnotation(SecondaryTables.class);
        sts = stsAnnotation != null ? stsAnnotation.value() : new SecondaryTable[0];
    } else {
        sts = new SecondaryTable[] { stAnnotation };
    }
    return sts;
}
Also used : SecondaryTables(javax.persistence.SecondaryTables) SecondaryTable(javax.persistence.SecondaryTable)

Example 2 with SecondaryTable

use of javax.persistence.SecondaryTable in project hibernate-orm by hibernate.

the class EntityBinder method addJoin.

private Join addJoin(SecondaryTable secondaryTable, JoinTable joinTable, PropertyHolder propertyHolder, boolean noDelayInPkColumnCreation) {
    // A non null propertyHolder means than we process the Pk creation without delay
    Join join = new Join();
    join.setPersistentClass(persistentClass);
    final String schema;
    final String catalog;
    final Object joinColumns;
    final List<UniqueConstraintHolder> uniqueConstraintHolders;
    final QualifiedTableName logicalName;
    if (secondaryTable != null) {
        schema = secondaryTable.schema();
        catalog = secondaryTable.catalog();
        logicalName = new QualifiedTableName(Identifier.toIdentifier(catalog), Identifier.toIdentifier(schema), context.getMetadataCollector().getDatabase().getJdbcEnvironment().getIdentifierHelper().toIdentifier(secondaryTable.name()));
        joinColumns = secondaryTable.pkJoinColumns();
        uniqueConstraintHolders = TableBinder.buildUniqueConstraintHolders(secondaryTable.uniqueConstraints());
    } else if (joinTable != null) {
        schema = joinTable.schema();
        catalog = joinTable.catalog();
        logicalName = new QualifiedTableName(Identifier.toIdentifier(catalog), Identifier.toIdentifier(schema), context.getMetadataCollector().getDatabase().getJdbcEnvironment().getIdentifierHelper().toIdentifier(joinTable.name()));
        joinColumns = joinTable.joinColumns();
        uniqueConstraintHolders = TableBinder.buildUniqueConstraintHolders(joinTable.uniqueConstraints());
    } else {
        throw new AssertionFailure("Both JoinTable and SecondaryTable are null");
    }
    final Table table = TableBinder.buildAndFillTable(schema, catalog, logicalName.getTableName(), false, uniqueConstraintHolders, null, null, context, null, null);
    final InFlightMetadataCollector.EntityTableXref tableXref = context.getMetadataCollector().getEntityTableXref(persistentClass.getEntityName());
    assert tableXref != null : "Could not locate EntityTableXref for entity [" + persistentClass.getEntityName() + "]";
    tableXref.addSecondaryTable(logicalName, join);
    if (secondaryTable != null) {
        TableBinder.addIndexes(table, secondaryTable.indexes(), context);
    }
    // no check constraints available on joins
    join.setTable(table);
    // somehow keep joins() for later.
    // Has to do the work later because it needs persistentClass id!
    LOG.debugf("Adding secondary table to entity %s -> %s", persistentClass.getEntityName(), join.getTable().getName());
    org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation(join);
    if (matchingTable != null) {
        join.setSequentialSelect(FetchMode.JOIN != matchingTable.fetch());
        join.setInverse(matchingTable.inverse());
        join.setOptional(matchingTable.optional());
        if (!BinderHelper.isEmptyAnnotationValue(matchingTable.sqlInsert().sql())) {
            join.setCustomSQLInsert(matchingTable.sqlInsert().sql().trim(), matchingTable.sqlInsert().callable(), ExecuteUpdateResultCheckStyle.fromExternalName(matchingTable.sqlInsert().check().toString().toLowerCase(Locale.ROOT)));
        }
        if (!BinderHelper.isEmptyAnnotationValue(matchingTable.sqlUpdate().sql())) {
            join.setCustomSQLUpdate(matchingTable.sqlUpdate().sql().trim(), matchingTable.sqlUpdate().callable(), ExecuteUpdateResultCheckStyle.fromExternalName(matchingTable.sqlUpdate().check().toString().toLowerCase(Locale.ROOT)));
        }
        if (!BinderHelper.isEmptyAnnotationValue(matchingTable.sqlDelete().sql())) {
            join.setCustomSQLDelete(matchingTable.sqlDelete().sql().trim(), matchingTable.sqlDelete().callable(), ExecuteUpdateResultCheckStyle.fromExternalName(matchingTable.sqlDelete().check().toString().toLowerCase(Locale.ROOT)));
        }
    } else {
        // default
        join.setSequentialSelect(false);
        join.setInverse(false);
        // perhaps not quite per-spec, but a Good Thing anyway
        join.setOptional(true);
    }
    if (noDelayInPkColumnCreation) {
        createPrimaryColumnsToSecondaryTable(joinColumns, propertyHolder, join);
    } else {
        secondaryTables.put(table.getQuotedName(), join);
        secondaryTableJoins.put(table.getQuotedName(), joinColumns);
    }
    return join;
}
Also used : QualifiedTableName(org.hibernate.boot.model.relational.QualifiedTableName) UniqueConstraintHolder(org.hibernate.cfg.UniqueConstraintHolder) AssertionFailure(org.hibernate.AssertionFailure) JoinTable(javax.persistence.JoinTable) SecondaryTable(javax.persistence.SecondaryTable) Table(org.hibernate.mapping.Table) Join(org.hibernate.mapping.Join) InFlightMetadataCollector(org.hibernate.boot.spi.InFlightMetadataCollector)

Example 3 with SecondaryTable

use of javax.persistence.SecondaryTable in project cosmic by MissionCriticalCloud.

the class DbUtil method getSecondaryTables.

public static final SecondaryTable[] getSecondaryTables(final AnnotatedElement clazz) {
    SecondaryTable[] sts = null;
    final SecondaryTable stAnnotation = clazz.getAnnotation(SecondaryTable.class);
    if (stAnnotation == null) {
        final SecondaryTables stsAnnotation = clazz.getAnnotation(SecondaryTables.class);
        sts = stsAnnotation != null ? stsAnnotation.value() : new SecondaryTable[0];
    } else {
        sts = new SecondaryTable[] { stAnnotation };
    }
    return sts;
}
Also used : SecondaryTables(javax.persistence.SecondaryTables) SecondaryTable(javax.persistence.SecondaryTable)

Example 4 with SecondaryTable

use of javax.persistence.SecondaryTable in project hibernate-orm by hibernate.

the class EntityBinder method findMatchingSecondaryTable.

private SecondaryTable findMatchingSecondaryTable(Join join) {
    final String nameToMatch = join.getTable().getQuotedName();
    SecondaryTable secondaryTable = annotatedClass.getAnnotation(SecondaryTable.class);
    if (secondaryTable != null && nameToMatch.equals(secondaryTable.name())) {
        return secondaryTable;
    }
    SecondaryTables secondaryTables = annotatedClass.getAnnotation(SecondaryTables.class);
    if (secondaryTables != null) {
        for (SecondaryTable secondaryTable2 : secondaryTables.value()) {
            if (secondaryTable != null && nameToMatch.equals(secondaryTable.name())) {
                return secondaryTable;
            }
        }
    }
    return null;
}
Also used : SecondaryTables(javax.persistence.SecondaryTables) SecondaryTable(javax.persistence.SecondaryTable)

Example 5 with SecondaryTable

use of javax.persistence.SecondaryTable in project CloudStack-archive by CloudStack-extras.

the class SqlGenerator method buildJoins.

protected static void buildJoins(StringBuilder innerJoin, Class<?> clazz) {
    String tableName = DbUtil.getTableName(clazz);
    SecondaryTable[] sts = DbUtil.getSecondaryTables(clazz);
    ArrayList<String> secondaryTables = new ArrayList<String>();
    for (SecondaryTable st : sts) {
        addPrimaryKeyJoinColumns(innerJoin, tableName, st.name(), st.join(), st.pkJoinColumns());
        secondaryTables.add(st.name());
    }
    Class<?> parent = clazz.getSuperclass();
    if (parent.getAnnotation(Entity.class) != null) {
        String table = DbUtil.getTableName(parent);
        PrimaryKeyJoinColumn[] pkjcs = DbUtil.getPrimaryKeyJoinColumns(clazz);
        assert (pkjcs != null) : "No Join columns specified for the super class";
        addPrimaryKeyJoinColumns(innerJoin, tableName, table, null, pkjcs);
    }
}
Also used : Entity(javax.persistence.Entity) PrimaryKeyJoinColumn(javax.persistence.PrimaryKeyJoinColumn) ArrayList(java.util.ArrayList) SecondaryTable(javax.persistence.SecondaryTable)

Aggregations

SecondaryTable (javax.persistence.SecondaryTable)9 SecondaryTables (javax.persistence.SecondaryTables)5 ArrayList (java.util.ArrayList)4 Entity (javax.persistence.Entity)3 PrimaryKeyJoinColumn (javax.persistence.PrimaryKeyJoinColumn)3 AnnotatedElement (java.lang.reflect.AnnotatedElement)1 JoinTable (javax.persistence.JoinTable)1 Element (org.dom4j.Element)1 AssertionFailure (org.hibernate.AssertionFailure)1 AnnotationDescriptor (org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor)1 QualifiedTableName (org.hibernate.boot.model.relational.QualifiedTableName)1 InFlightMetadataCollector (org.hibernate.boot.spi.InFlightMetadataCollector)1 UniqueConstraintHolder (org.hibernate.cfg.UniqueConstraintHolder)1 Join (org.hibernate.mapping.Join)1 Table (org.hibernate.mapping.Table)1