|
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(
|