From: <hib...@li...> - 2006-05-04 15:10:33
|
Author: epbernard Date: 2006-05-04 11:10:22 -0400 (Thu, 04 May 2006) New Revision: 9874 Modified: trunk/Hibernate3/src/org/hibernate/cfg/DefaultNamingStrategy.java trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java trunk/Hibernate3/src/org/hibernate/cfg/ImprovedNamingStrategy.java trunk/Hibernate3/src/org/hibernate/cfg/NamingStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3NamingStrategy.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java Log: HHH-1477 NamingStrategy support EntityA_EntityB ANN-195 does not change the EJB3 NS however Modified: trunk/Hibernate3/src/org/hibernate/cfg/DefaultNamingStrategy.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/cfg/DefaultNamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/Hibernate3/src/org/hibernate/cfg/DefaultNamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -46,7 +46,10 @@ /** * Return the unqualified property name, not the best strategy but a backward compatible one */ - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { //use a degenerated strategy for backward compatibility return StringHelper.unqualify(propertyName); } @@ -61,7 +64,9 @@ /** * Return the property name or propertyTableName */ - public String foreignKeyColumnName(String propertyName, String propertyTableName, String referencedColumnName) { + public String foreignKeyColumnName( + String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName + ) { String header = propertyName != null ? StringHelper.unqualify( propertyName ) : propertyTableName; if (header == null) throw new AssertionFailure("NammingStrategy not properly filled"); return columnName( header ); //+ "_" + referencedColumnName not used for backward compatibility Modified: trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -1365,7 +1365,13 @@ //TODO mappings.getLogicalTableName(ownerTable) String logicalOwnerTableName = ownerTable.getName(); //FIXME we don't have the associated entity table name here, has to be done in a second pass - tableName = mappings.getNamingStrategy().collectionTableName( logicalOwnerTableName ,null, path); + tableName = mappings.getNamingStrategy().collectionTableName( + collection.getOwner().getEntityName(), + logicalOwnerTableName , + null, + null, + path + ); } Attribute schemaNode = node.attribute( "schema" ); String schema = schemaNode == null ? Modified: trunk/Hibernate3/src/org/hibernate/cfg/ImprovedNamingStrategy.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/cfg/ImprovedNamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/Hibernate3/src/org/hibernate/cfg/ImprovedNamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -60,7 +60,10 @@ return buf.toString().toLowerCase(); } - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { return tableName( ownerEntityTable + '_' + propertyToColumnName(propertyName) ); } @@ -74,7 +77,9 @@ /** * Return the property name or propertyTableName */ - public String foreignKeyColumnName(String propertyName, String propertyTableName, String referencedColumnName) { + public String foreignKeyColumnName( + String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName + ) { String header = propertyName != null ? StringHelper.unqualify( propertyName ) : propertyTableName; if (header == null) throw new AssertionFailure("NammingStrategy not properly filled"); return columnName( header ); //+ "_" + referencedColumnName not used for backward compatibility Modified: trunk/Hibernate3/src/org/hibernate/cfg/NamingStrategy.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/cfg/NamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/Hibernate3/src/org/hibernate/cfg/NamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -8,7 +8,7 @@ * naming standards for database objects. * * #propertyToTableName(String, String) should be replaced by - * {@link #collectionTableName(String, String, String)} + * {@link #collectionTableName(String,String,String,String,String)} * * @see DefaultNamingStrategy * @see ImprovedNamingStrategy @@ -43,11 +43,16 @@ /** * Return a collection table name ie an association having a join table * + * @param ownerEntity * @param ownerEntityTable owner side table name + * @param associatedEntity * @param associatedEntityTable reverse side table name if any * @param propertyName collection role */ - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName); + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ); /** * Return the join key column name ie a FK column used in a JOINED strategy or for a secondary table * @@ -58,10 +63,13 @@ /** * Return the foreign key column name for the given parameters * @param propertyName the property name involved + * @param propertyEntityName * @param propertyTableName the property table name involved (logical one) * @param referencedColumnName the referenced column name involved (logical one) */ - public String foreignKeyColumnName(String propertyName, String propertyTableName, String referencedColumnName); + public String foreignKeyColumnName( + String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName + ); /** * Return the logical column name used to refer to a column in the metadata * (like index, unique constraints etc) Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -20,7 +20,10 @@ } @Override - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { return tableName( new StringBuilder( ownerEntityTable ).append( "_" ) .append( @@ -32,7 +35,9 @@ } - public String foreignKeyColumnName(String propertyName, String propertyTableName, String referencedColumnName) { + public String foreignKeyColumnName( + String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName + ) { String header = propertyName != null ? addUnderscores( propertyName ) : propertyTableName; if ( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" ); return columnName( header + "_" + referencedColumnName ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3NamingStrategy.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3NamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3NamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -28,7 +28,10 @@ return columnName; } - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { return tableName( new StringBuilder( ownerEntityTable ).append( "_" ) .append( @@ -43,7 +46,9 @@ return columnName( joinedColumn ); } - public String foreignKeyColumnName(String propertyName, String propertyTableName, String referencedColumnName) { + public String foreignKeyColumnName( + String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName + ) { String header = propertyName != null ? StringHelper.unqualify( propertyName ) : propertyTableName; if ( header == null ) throw new AssertionFailure( "NammingStrategy not properly filled" ); return columnName( header + "_" + referencedColumnName ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -34,6 +34,7 @@ private String mappedByPropertyName; //table name on the mapped by side if any private String mappedByTableName; + private String mappedByEntityName; //FIXME hacky solution to get the information at proeprty ref resolution public String getManyToManyOwnerSideEntityName() { @@ -262,17 +263,19 @@ } } - public void linkValueUsingDefaultColumnNaming(Column referencedColumn, Table referencedTable, SimpleValue value) { + public void linkValueUsingDefaultColumnNaming( + Column referencedColumn, PersistentClass referencedEntity, SimpleValue value + ) { String columnName; String logicalReferencedColumn = getMappings().getLogicalColumnName( - referencedColumn.getName(), referencedTable + referencedColumn.getName(), referencedEntity.getTable() ); boolean mappedBySide = mappedByTableName != null || mappedByPropertyName != null; boolean ownerSide = getPropertyName() != null; if ( mappedBySide ) { columnName = getMappings().getNamingStrategy().foreignKeyColumnName( mappedByPropertyName, - mappedByTableName, + mappedByEntityName, mappedByTableName, logicalReferencedColumn ); //columnName = ( defaultColumnHeader == null ? getPropertyName() : defaultColumnHeader ) + "_" + logicalReferencedColumn; @@ -280,7 +283,7 @@ else if ( ownerSide ) { columnName = getMappings().getNamingStrategy().foreignKeyColumnName( getPropertyName(), - getMappings().getLogicalTableName( referencedTable ), + referencedEntity.getEntityName(), getMappings().getLogicalTableName( referencedEntity.getTable() ), logicalReferencedColumn ); } @@ -288,7 +291,7 @@ //is an intra-entity hierarchy table join so copy the name by default columnName = getMappings().getNamingStrategy().joinKeyColumnName( logicalReferencedColumn, - getMappings().getLogicalTableName( referencedTable ) + getMappings().getLogicalTableName( referencedEntity.getTable() ) ); } //yuk side effect on an implicit column @@ -419,28 +422,6 @@ } } - public void setDefaultColumnName() { - String columnName = null; - boolean mappedBySide = mappedByTableName != null || mappedByPropertyName != null; - boolean ownerSide = getPropertyName() != null; - if ( mappedBySide ) { - columnName = getMappings().getNamingStrategy().foreignKeyColumnName( - mappedByPropertyName, - mappedByTableName, - referencedColumn - ); - //columnName = ( defaultColumnHeader == null ? getPropertyName() : defaultColumnHeader ) + "_" + logicalReferencedColumn; - } - else if ( ownerSide ) { - columnName = getMappings().getNamingStrategy().foreignKeyColumnName( - getPropertyName(), - null, //getMappings().getLogicalTableName( referencedTable ), - referencedColumn - ); - } - getMappingColumn().setName( columnName ); - } - public void setMappedByPropertyName(String mappedByPropertyName) { this.mappedByPropertyName = mappedByPropertyName; } @@ -494,4 +475,10 @@ } return joinColumns; } + + public void setMappedBy(String entityName, String logicalTableName, String mappedByProperty) { + this.mappedByEntityName = entityName; + this.mappedByTableName = logicalTableName; + this.mappedByPropertyName = mappedByProperty; + } } \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -11,10 +11,10 @@ import javax.persistence.AttributeOverrides; import javax.persistence.Embeddable; import javax.persistence.FetchType; +import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.MapKey; import javax.persistence.OneToMany; -import javax.persistence.JoinTable; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -216,7 +216,7 @@ else { throw new AnnotationException( "Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: " - + StringHelper.qualify( entityName, property.getName() ) + + StringHelper.qualify( entityName, property.getName() ) ); } } @@ -787,7 +787,7 @@ } //check for user error if ( ! isCollectionOfEntities ) { - if ( property.isAnnotationPresent( ManyToMany.class ) || property.isAnnotationPresent( OneToMany.class )) { + if ( property.isAnnotationPresent( ManyToMany.class ) || property.isAnnotationPresent( OneToMany.class ) ) { String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName(); throw new AnnotationException( "Use of @OneToMany or @ManyToMany targeting an unmapped class: " + path + "[" + collType + "]" @@ -795,9 +795,9 @@ } else { JoinTable joinTableAnn = property.getAnnotation( JoinTable.class ); - if (joinTableAnn != null && joinTableAnn.inverseJoinColumns().length > 0) { + if ( joinTableAnn != null && joinTableAnn.inverseJoinColumns().length > 0 ) { String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName(); - throw new AnnotationException( + throw new AnnotationException( "Use of @JoinTable.inverseJoinColumns targeting an unmapped class: " + path + "[" + collType + "]" ); } @@ -856,16 +856,20 @@ String mappedByProperty = mappings.getFromMappedBy( collValue.getOwnerEntityName(), column.getPropertyName() ); - column.setMappedByPropertyName( mappedByProperty ); Table ownerTable = collValue.getOwner().getTable(); - column.setMappedByTableName( mappings.getLogicalTableName( ownerTable ) ); + column.setMappedBy( + collValue.getOwner().getEntityName(), mappings.getLogicalTableName( ownerTable ), + mappedByProperty + ); // String header = ( mappedByProperty == null ) ? mappings.getLogicalTableName( ownerTable ) : mappedByProperty; // column.setDefaultColumnHeader( header ); } if ( StringHelper.isEmpty( associationTableBinder.getName() ) ) { //default value associationTableBinder.setDefaultName( + collValue.getOwner().getEntityName(), mappings.getLogicalTableName( collValue.getOwner().getTable() ), + collectionEntity != null ? collectionEntity.getEntityName() : null, collectionEntity != null ? mappings.getLogicalTableName( collectionEntity.getTable() ) : null, joinColumns[0].getPropertyName() ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -46,6 +46,8 @@ private String ownerEntityTable; private String associatedEntityTable; private String propertyName; + private String ownerEntity; + private String associatedEntity; public void setSchema(String schema) { this.schema = schema; @@ -83,6 +85,7 @@ this.mappings = mappings; } + // only bind association table currently public Table bind() { //logicalName only accurate for assoc table... String logicalName = mappings.getNamingStrategy() @@ -90,7 +93,9 @@ String extendedName = name != null ? mappings.getNamingStrategy().tableName( name ) : mappings.getNamingStrategy() - .collectionTableName( ownerEntityTable, associatedEntityTable, propertyName ); + .collectionTableName( + ownerEntity, ownerEntityTable, associatedEntity, associatedEntityTable, propertyName + ); return fillTable( schema, catalog, extendedName, logicalName, isAbstract, uniqueConstraints, constraints, @@ -198,7 +203,7 @@ while ( idColumns.hasNext() ) { Column column = (Column) idColumns.next(); columns[0].overrideSqlTypeIfNecessary( column ); - columns[0].linkValueUsingDefaultColumnNaming( column, referencedEntity.getTable(), value ); + columns[0].linkValueUsingDefaultColumnNaming( column, referencedEntity, value ); } } else { @@ -277,7 +282,7 @@ //proper join column if ( joinCol.isNameDeferred() ) { joinCol.linkValueUsingDefaultColumnNaming( - col, referencedEntity.getTable(), value + col, referencedEntity, value ); } else { @@ -311,7 +316,7 @@ Column synthCol = (Column) columnIterator.next(); if ( joinCol.isNameDeferred() ) { //this has to be the default value - joinCol.linkValueUsingDefaultColumnNaming( synthCol, referencedEntity.getTable(), value ); + joinCol.linkValueUsingDefaultColumnNaming( synthCol, referencedEntity, value ); } else { joinCol.linkWithValue( value ); @@ -347,8 +352,13 @@ return result; } - public void setDefaultName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public void setDefaultName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { + this.ownerEntity = ownerEntity; this.ownerEntityTable = ownerEntityTable; + this.associatedEntity = associatedEntity; this.associatedEntityTable = associatedEntityTable; this.propertyName = propertyName; this.name = null; Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java 2006-05-04 13:42:48 UTC (rev 9873) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java 2006-05-04 15:10:22 UTC (rev 9874) @@ -35,7 +35,10 @@ return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName; } - public String collectionTableName(String ownerEntityTable, String associatedEntityTable, String propertyName) { + public String collectionTableName( + String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, + String propertyName + ) { return tableName( new StringBuilder( ownerEntityTable ).append( "_" ) .append( |