Example usage for org.hibernate.mapping ForeignKey getReferencedTable

List of usage examples for org.hibernate.mapping ForeignKey getReferencedTable

Introduction

In this page you can find the example usage for org.hibernate.mapping ForeignKey getReferencedTable.

Prototype

public Table getReferencedTable() 

Source Link

Usage

From source file:com.clican.pluto.orm.dynamic.impl.DataBaseOperationImpl.java

License:LGPL

@SuppressWarnings("unchecked")
public void alterTable(Configuration cfg, ModelDescription oldOne, ModelDescription newOne) {
    Connection conn = null;/*from   www.  j  a  v a  2s.  c  o m*/
    DatabaseMetadata meta = null;
    String defaultCatalog = cfg.getProperties().getProperty(Environment.DEFAULT_CATALOG);
    String defaultSchema = cfg.getProperties().getProperty(Environment.DEFAULT_SCHEMA);
    List<String> alterSqls = new ArrayList<String>();
    try {
        conn = dataSource.getConnection();
        meta = new DatabaseMetadata(conn, dialect);
        Mapping mapping = cfg.buildMapping();
        // Alter table name;
        if (!oldOne.getName().equals(newOne.getName())) {
            String alterTableName = "alter table " + dialect.openQuote() + oldOne.getName().toUpperCase()
                    + dialect.closeQuote() + "rename to " + dialect.openQuote() + newOne.getName().toUpperCase()
                    + dialect.closeQuote();
            executeSql(conn, alterTableName);
        }

        List<PropertyDescription> oldPropertyDescriptionList = oldOne.getPropertyDescriptionList();
        List<PropertyDescription> currentPropertyDescriptionList = newOne.getPropertyDescriptionList();
        List<PropertyDescription> removePropertyList = new ArrayList<PropertyDescription>();
        List<PropertyDescription> addPropertyList = new ArrayList<PropertyDescription>(
                currentPropertyDescriptionList);
        Map<PropertyDescription, PropertyDescription> pdMap = new HashMap<PropertyDescription, PropertyDescription>();
        for (PropertyDescription pd1 : oldPropertyDescriptionList) {
            boolean remove = true;
            for (PropertyDescription pd2 : currentPropertyDescriptionList) {
                if (pd1.getId().equals(pd2.getId())) {
                    addPropertyList.remove(pd2);
                    if (!pd1.equals(pd2)) {
                        pdMap.put(pd2, pd1);
                    }
                    remove = false;
                    break;
                }
            }
            if (remove) {
                removePropertyList.add(pd1);
            }
        }

        Iterator<Table> tableIter = cfg.getTableMappings();
        while (tableIter.hasNext()) {
            Table table = tableIter.next();
            TableMetadata tableInfo = meta.getTableMetadata(table.getName(),
                    (table.getSchema() == null) ? defaultSchema : table.getSchema(),
                    (table.getCatalog() == null) ? defaultCatalog : table.getCatalog(), table.isQuoted()

            );
            if (tableInfo == null) {
                alterSqls.add(table.sqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
            } else {
                if (!table.getName().equalsIgnoreCase(newOne.getName())) {
                    continue;
                }
                for (PropertyDescription removeProperty : removePropertyList) {
                    if (removeProperty.getControl().isSupportMutil()
                            && removeProperty.getControl().isDynamic()) {
                        alterSqls.add("drop table " + dialect.openQuote() + newOne.getName().toUpperCase() + "_"
                                + removeProperty.getName().toUpperCase() + "_RELATION" + dialect.closeQuote());
                    } else {
                        if (((DialectExtention) dialect).needDropForeignKeyBeforeDropColumn()) {
                            ForeignKeyMetadata fkm = tableInfo.getForeignKeyMetadataByColumnNames(
                                    new String[] { removeProperty.getName().toUpperCase() });
                            if (fkm != null) {
                                alterSqls.add("alter table " + dialect.openQuote()
                                        + newOne.getName().toUpperCase() + dialect.closeQuote() + " "
                                        + dialect.getDropForeignKeyString() + " " + dialect.openQuote()
                                        + fkm.getName() + dialect.closeQuote());
                            }
                        }
                        alterSqls.add("alter table " + dialect.openQuote() + newOne.getName().toUpperCase()
                                + dialect.closeQuote() + " drop column " + dialect.openQuote()
                                + removeProperty.getName().toUpperCase() + dialect.closeQuote());
                    }
                }
                StringBuffer root = new StringBuffer("alter table ")
                        .append(table.getQualifiedName(dialect, defaultCatalog, defaultSchema)).append(' ')
                        .append(dialect.getAddColumnString());
                Iterator<Column> iter = table.getColumnIterator();
                while (iter.hasNext()) {
                    Column column = iter.next();
                    PropertyDescription pd = null;
                    if ((pd = contains(column.getName(), addPropertyList)) != null) {
                        StringBuffer alter = new StringBuffer(root.toString()).append(' ')
                                .append(column.getQuotedName(dialect)).append(' ')
                                .append(column.getSqlType(dialect, mapping));

                        String defaultValue = column.getDefaultValue();
                        if (defaultValue != null) {
                            alter.append(" default ").append(defaultValue);

                            if (column.isNullable()) {
                                alter.append(dialect.getNullColumnString());
                            } else {
                                alter.append(" not null");
                            }

                        }

                        boolean useUniqueConstraint = column.isUnique() && dialect.supportsUnique()
                                && (!column.isNullable() || dialect.supportsNotNullUnique());
                        if (useUniqueConstraint) {
                            alter.append(" unique");
                        }

                        if (column.hasCheckConstraint() && dialect.supportsColumnCheck()) {
                            alter.append(" check(").append(column.getCheckConstraint()).append(")");
                        }

                        String columnComment = column.getComment();
                        if (columnComment != null) {
                            alter.append(dialect.getColumnComment(columnComment));
                        }

                        alterSqls.add(alter.toString());
                    } else if ((pd = contains(column.getName(), pdMap)) != null) {
                        PropertyDescription newPd = pd;
                        PropertyDescription oldPd = pdMap.get(pd);
                        if (!oldPd.getName().equalsIgnoreCase(newPd.getName())) {
                            StringBuffer renameColumn = new StringBuffer("alter table ")
                                    .append(table.getQualifiedName(dialect, defaultCatalog, defaultSchema))
                                    .append(' ').append(((DialectExtention) dialect).getRenameColumnString(
                                            oldPd.getName().toUpperCase(), newPd.getName().toUpperCase()));
                            if (((DialectExtention) dialect).isAddColumnDefinitionWhenRename()) {
                                renameColumn.append(" ");
                                renameColumn.append(column.getSqlType(dialect, mapping));
                            }
                            executeSql(conn, renameColumn.toString());
                        }

                        StringBuffer alterColumn = new StringBuffer("alter table ")
                                .append(table.getQualifiedName(dialect, defaultCatalog, defaultSchema))
                                .append(' ').append(((DialectExtention) dialect).getModifyColumnString(column))
                                .append(' ').append(column.getQuotedName(dialect));
                        alterColumn.append(" ");
                        alterColumn.append(column.getSqlType(dialect, mapping));
                        String defaultValue = column.getDefaultValue();
                        if (defaultValue != null) {
                            alterColumn.append(" default ").append(defaultValue);

                            if (column.isNullable()) {
                                alterColumn.append(dialect.getNullColumnString());
                            } else {
                                alterColumn.append(" not null");
                            }

                        }

                        boolean useUniqueConstraint = column.isUnique() && dialect.supportsUnique()
                                && (!column.isNullable() || dialect.supportsNotNullUnique());
                        if (useUniqueConstraint) {
                            alterColumn.append(" unique");
                        }

                        if (column.hasCheckConstraint() && dialect.supportsColumnCheck()) {
                            alterColumn.append(" check(").append(column.getCheckConstraint()).append(")");
                        }

                        String columnComment = column.getComment();
                        if (columnComment != null) {
                            alterColumn.append(dialect.getColumnComment(columnComment));
                        }
                        alterSqls.add(alterColumn.toString());
                    }
                }
            }
        }
        tableIter = cfg.getTableMappings();
        while (tableIter.hasNext()) {
            Table table = tableIter.next();
            Iterator<ForeignKey> subIter = table.getForeignKeyIterator();
            while (subIter.hasNext()) {
                ForeignKey fk = (ForeignKey) subIter.next();
                if (fk.isPhysicalConstraint()) {
                    TableMetadata tableInfo = meta.getTableMetadata(table.getName(),
                            (table.getSchema() == null) ? defaultSchema : table.getSchema(),
                            (table.getCatalog() == null) ? defaultCatalog : table.getCatalog(), table.isQuoted()

                    );
                    if (tableInfo == null) {
                        String[] cols = new String[fk.getColumnSpan()];
                        String[] refcols = new String[fk.getColumnSpan()];
                        int i = 0;
                        Iterator<Column> refiter = null;
                        if (fk.isReferenceToPrimaryKey()) {
                            refiter = fk.getReferencedTable().getPrimaryKey().getColumnIterator();
                        } else {
                            refiter = fk.getReferencedColumns().iterator();
                        }

                        Iterator<Column> columnIter = fk.getColumnIterator();
                        while (columnIter.hasNext()) {
                            cols[i] = ((Column) columnIter.next()).getQuotedName(dialect);
                            refcols[i] = ((Column) refiter.next()).getQuotedName(dialect);
                            i++;
                        }
                        String result = dialect
                                .getAddForeignKeyConstraintString(
                                        fk.getName(), cols, fk.getReferencedTable().getQualifiedName(dialect,
                                                defaultCatalog, defaultSchema),
                                        refcols, fk.isReferenceToPrimaryKey());
                        StringBuffer createFK = new StringBuffer("alter table ")
                                .append(table.getQualifiedName(dialect, defaultCatalog, defaultSchema))
                                .append(dialect.supportsCascadeDelete() ? result + " on delete cascade"
                                        : result);
                        alterSqls.add(createFK.toString());
                    }
                }
            }
        }
        this.executeSqls(conn, alterSqls);
    } catch (Exception e) {
        throw new PlutoException(e);
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                log.error("", e);
            }
        }
    }
}

From source file:com.clican.pluto.orm.dynamic.impl.DataBaseOperationImpl.java

License:LGPL

@SuppressWarnings("unchecked")
public void createTable(Configuration cfg) {
    Connection conn = null;// w w  w. j ava 2  s.  c  o  m
    DatabaseMetadata meta = null;
    String defaultCatalog = cfg.getProperties().getProperty(Environment.DEFAULT_CATALOG);
    String defaultSchema = cfg.getProperties().getProperty(Environment.DEFAULT_SCHEMA);
    List<String> createSqls = new ArrayList<String>();
    try {
        conn = dataSource.getConnection();
        meta = new DatabaseMetadata(conn, dialect);
        Iterator<Table> tableIter = cfg.getTableMappings();
        Mapping mapping = cfg.buildMapping();
        while (tableIter.hasNext()) {
            Table table = (Table) tableIter.next();
            TableMetadata tableInfo = meta.getTableMetadata(table.getName(),
                    (table.getSchema() == null) ? defaultSchema : table.getSchema(),
                    (table.getCatalog() == null) ? defaultCatalog : table.getCatalog(), table.isQuoted()

            );
            if (tableInfo == null) {
                createSqls.add(table.sqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
            }
        }
        tableIter = cfg.getTableMappings();
        while (tableIter.hasNext()) {
            Table table = (Table) tableIter.next();
            Iterator<ForeignKey> subIter = table.getForeignKeyIterator();
            while (subIter.hasNext()) {
                ForeignKey fk = (ForeignKey) subIter.next();
                if (fk.isPhysicalConstraint()) {
                    TableMetadata tableInfo = meta.getTableMetadata(table.getName(),
                            (table.getSchema() == null) ? defaultSchema : table.getSchema(),
                            (table.getCatalog() == null) ? defaultCatalog : table.getCatalog(), table.isQuoted()

                    );
                    if (tableInfo == null) {
                        String[] cols = new String[fk.getColumnSpan()];
                        String[] refcols = new String[fk.getColumnSpan()];
                        int i = 0;
                        Iterator<Column> refiter = null;
                        if (fk.isReferenceToPrimaryKey()) {
                            refiter = fk.getReferencedTable().getPrimaryKey().getColumnIterator();
                        } else {
                            refiter = fk.getReferencedColumns().iterator();
                        }

                        Iterator<Column> columnIter = fk.getColumnIterator();
                        while (columnIter.hasNext()) {
                            cols[i] = ((Column) columnIter.next()).getQuotedName(dialect);
                            refcols[i] = ((Column) refiter.next()).getQuotedName(dialect);
                            i++;
                        }
                        String result = dialect
                                .getAddForeignKeyConstraintString(
                                        fk.getName(), cols, fk.getReferencedTable().getQualifiedName(dialect,
                                                defaultCatalog, defaultSchema),
                                        refcols, fk.isReferenceToPrimaryKey());
                        StringBuffer createFK = new StringBuffer("alter table ")
                                .append(table.getQualifiedName(dialect, defaultCatalog, defaultSchema))
                                .append(dialect.supportsCascadeDelete() ? result + " on delete cascade"
                                        : result);
                        createSqls.add(createFK.toString());
                    }
                }
            }
        }
        this.executeSqls(conn, createSqls);
    } catch (DDLException e) {
        throw e;
    } catch (Exception e) {
        throw new PlutoException(e);
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                log.error("", e);
            }
        }
    }

}

From source file:com.medigy.tool.persist.hibernate.dbdd.MedigyDatabaseStructureRules.java

License:Open Source License

public boolean isParentRelationship(final TableStructure structure, final ForeignKey foreignKey) {
    for (Iterator colls = structure.getConfiguration().getCollectionMappings(); colls.hasNext();) {
        final Collection coll = (Collection) colls.next();
        if (coll.isOneToMany()) {
            if (foreignKey.getReferencedTable() == coll.getOwner().getTable()
                    && foreignKey.getTable() == coll.getCollectionTable())
                return true;
        }// ww w. j  a  va2s.c  om
    }

    return false;
}

From source file:com.medigy.tool.persist.hibernate.dbdd.MedigyDatabaseStructureRules.java

License:Open Source License

public boolean isParentRelationship(final TableStructure structure, final ForeignKey foreignKey,
        final Table table) {
    return foreignKey.getReferencedTable() == table && isParentRelationship(structure, foreignKey);
}

From source file:com.medigy.tool.persist.hibernate.dbdd.MedigyDatabaseStructureRules.java

License:Open Source License

public boolean isSubclassRelationship(final TableStructure structure, final ForeignKey foreignKey) {
    PersistentClass sourceClass = structure.getClassForTable(foreignKey.getTable());
    PersistentClass refClass = structure.getClassForTable(foreignKey.getReferencedTable());
    return refClass.getMappedClass().isAssignableFrom(sourceClass.getMappedClass());
}

From source file:com.netspective.medigy.util.HibernateDiagramReferenceTableNodeGenerator.java

License:Open Source License

public String getEdgeDestElementAndPort(final HibernateDiagramGenerator generator,
        final HibernateDiagramGeneratorFilter filter, final ForeignKey foreignKey) {
    return foreignKey.getReferencedTable().getName();
}

From source file:com.netspective.tool.hibernate.document.diagram.HibernateDiagramGenerator.java

License:Open Source License

public void generate() {
    final GraphvizDiagramGenerator gdg = getGraphvizDiagramGenerator();
    final HibernateDiagramGeneratorFilter filter = getDiagramFilter();
    final Set includedTables = new HashSet();

    for (final Iterator classes = configuration.getClassMappings(); classes.hasNext();) {
        final PersistentClass pclass = (PersistentClass) classes.next();
        final Table table = (Table) pclass.getTable();
        if (filter.includeClassInDiagram(this, pclass)) {
            final HibernateDiagramTableNodeGenerator nodeGenerator = filter.getTableNodeGenerator(this, pclass);
            final GraphvizDiagramNode node = nodeGenerator.generateTableNode(this, filter, pclass);
            filter.formatTableNode(this, pclass, node);
            gdg.addNode(node);// w  ww .  j  ava2  s. co m
            includedTables.add(table);
        }
    }

    for (final Iterator classes = configuration.getClassMappings(); classes.hasNext();) {
        final PersistentClass pclass = (PersistentClass) classes.next();
        final Table table = (Table) pclass.getTable();
        if (includedTables.contains(table)) {
            FOREIGN_KEY: for (final Iterator fKeys = table.getForeignKeyIterator(); fKeys.hasNext();) {
                final ForeignKey foreignKey = (ForeignKey) fKeys.next();
                for (Iterator fKeyCols = foreignKey.getColumnIterator(); fKeyCols.hasNext();) {
                    final Column fKeyCol = (Column) fKeyCols.next();
                    if (!filter.includeColumnInDiagram(this, fKeyCol))
                        continue FOREIGN_KEY;
                }

                if (filter.includeForeignKeyEdgeInDiagram(this, foreignKey)
                        && includedTables.contains(foreignKey.getReferencedTable())) {
                    final HibernateDiagramTableNodeGenerator sourceTableNodeGenerator = filter
                            .getTableNodeGenerator(this, pclass);
                    final HibernateDiagramTableNodeGenerator refTableNodeGenerator = filter
                            .getTableNodeGenerator(this, getClassForTable(foreignKey.getReferencedTable()));

                    GraphvizDiagramEdge edge = new GraphvizDiagramEdge(gdg,
                            sourceTableNodeGenerator.getEdgeSourceElementAndPort(this, filter, foreignKey),
                            refTableNodeGenerator.getEdgeDestElementAndPort(this, filter, foreignKey));
                    filter.formatForeignKeyEdge(this, foreignKey, edge);
                    gdg.addEdge(edge);
                }
            }
        }
    }
}

From source file:com.netspective.tool.hibernate.document.diagram.HibernateDiagramGenerator.java

License:Open Source License

/**
 * Ascertain whether the referenced class in the foreign key relationship is a superclass of the source
 * class./*from  w  w  w .  j a v  a  2  s  .  com*/
 *
 * @param foreignKey The foreign key relationship
 *
 * @return True if the source of the foreign key is a subclass of the referenced class
 */
public boolean isSubclassRelationship(final ForeignKey foreignKey) {
    PersistentClass sourceClass = getClassForTable(foreignKey.getTable());
    PersistentClass refClass = getClassForTable(foreignKey.getReferencedTable());
    return refClass.getMappedClass().isAssignableFrom(sourceClass.getMappedClass());
}

From source file:com.netspective.tool.hibernate.document.diagram.HibernateDiagramGenerator.java

License:Open Source License

public boolean isParentRelationship(final ForeignKey foreignKey) {
    for (Iterator colls = getConfiguration().getCollectionMappings(); colls.hasNext();) {
        final Collection coll = (Collection) colls.next();
        if (coll.isOneToMany()) {
            // for parents, we put the crow arrow pointing to us (the source becomes the parent, not the child -- this way it will look like a tree)
            if (foreignKey.getReferencedTable() == coll.getOwner().getTable()
                    && foreignKey.getTable() == coll.getCollectionTable())
                return true;
        }/*from w  ww . j ava 2  s.c  om*/
    }

    return false;
}

From source file:com.netspective.tool.hibernate.document.diagram.HibernateDiagramTableStructureNodeGenerator.java

License:Open Source License

public String getEdgeSourceElementAndPort(final HibernateDiagramGenerator generator,
        final HibernateDiagramGeneratorFilter filter, final ForeignKey foreignKey) {
    // the subclass will point to the superclass and be formatted as a "back" reference to properly set the weight
    if (filter.isShowClassStructure(generator, foreignKey) && generator.isSubclassRelationship(foreignKey))
        return foreignKey.getReferencedTable().getName();

    // for parents, we put the crow arrow pointing to us (the source becomes the parent, not the child -- this way it will look like a tree)
    if (generator.isParentRelationship(foreignKey))
        return foreignKey.getReferencedTable().getName();

    return filter.isIncludeEdgePort(generator, foreignKey, true)
            ? (foreignKey.getTable().getName() + ":"
                    + (showConstraints// w ww . j a  v  a 2s. co  m
                            ? (foreignKey.getColumn(0).getName()
                                    + HibernateDiagramFilter.COLUMN_PORT_NAME_CONSTRAINT_SUFFIX)
                            : foreignKey.getColumn(0).getName()))
            : foreignKey.getTable().getName();

}