List of usage examples for org.hibernate.mapping ForeignKey getReferencedTable
public Table getReferencedTable()
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(); }