|
From: <hib...@li...> - 2006-04-07 12:24:46
|
Author: max...@jb...
Date: 2006-04-07 08:24:37 -0400 (Fri, 07 Apr 2006)
New Revision: 9737
Modified:
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java
trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java
trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd
trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java
Log:
HBX-615 exclude for <set> and <many-to-one>
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCBinder.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -172,10 +172,19 @@
private void bindIncomingForeignKeys(PersistentClass rc, Set processed, List foreignKeys, Mapping mapping) {
if(foreignKeys!=null) {
for (Iterator iter = foreignKeys.iterator(); iter.hasNext();) {
- ForeignKey fk = (ForeignKey) iter.next();
+ ForeignKey foreignKey = (ForeignKey) iter.next();
- Property property = bindOneToMany(rc, fk, processed, mapping);
- rc.addProperty(property);
+ if(revengStrategy.excludeForeignKeyAsCollection(
+ foreignKey.getName(),
+ TableIdentifier.create(foreignKey.getTable() ),
+ foreignKey.getColumns(),
+ TableIdentifier.create(foreignKey.getReferencedTable() ),
+ foreignKey.getReferencedColumns())) {
+ log.debug("Rev.eng excluded one-to-many for foreignkey " + foreignKey.getName());
+ } else {
+ Property property = bindOneToMany(rc, foreignKey, processed, mapping);
+ rc.addProperty(property);
+ }
}
}
}
@@ -198,8 +207,7 @@
value.addColumn(fkcolumn);
processedColumns.add(fkcolumn);
}
- value.setFetchMode(FetchMode.SELECT);
-
+ value.setFetchMode(FetchMode.SELECT);
return makeProperty(propertyName, value, true, true, value.getFetchMode()!=FetchMode.JOIN, null, null);
}
@@ -219,10 +227,14 @@
boolean b = isUniqueReference(foreignKey);
+ TableIdentifier foreignKeyTable = TableIdentifier.create( foreignKey.getTable() );
+ TableIdentifier foreignKeyReferencedTable = TableIdentifier.create( foreignKey.getReferencedTable() );
String collectionRole = revengStrategy.foreignKeyToCollectionName(
foreignKey.getName(),
- TableIdentifier.create( foreignKey.getTable() ),
- foreignKey.getColumns(), TableIdentifier.create( foreignKey.getReferencedTable() ), foreignKey.getReferencedColumns(),
+ foreignKeyTable,
+ foreignKey.getColumns(),
+ foreignKeyReferencedTable,
+ foreignKey.getReferencedColumns(),
b
);
collectionRole = makeUnique(rc,collectionRole);
@@ -232,12 +244,20 @@
log.debug(fullRolePath + " found twice!");
}
collection.setRole(fullRolePath); // Master.setOfChildren+
- collection.setInverse(true); // TODO: allow overriding this
- collection.setLazy(true); // TODO: configurable
+ collection.setInverse(revengStrategy.isForeignKeyCollectionInverse(foreignKey.getName(),
+ foreignKeyTable,
+ foreignKey.getColumns(),
+ foreignKeyReferencedTable,
+ foreignKey.getReferencedColumns())); // TODO: allow overriding this
+ collection.setLazy(revengStrategy.isForeignKeyCollectionLazy(foreignKey.getName(),
+ foreignKeyTable,
+ foreignKey.getColumns(),
+ foreignKeyReferencedTable,
+ foreignKey.getReferencedColumns()));
collection.setFetchMode(FetchMode.SELECT);
OneToMany oneToMany = new OneToMany( collection.getOwner() );
- oneToMany.setReferencedEntityName( revengStrategy.tableToClassName( TableIdentifier.create( foreignKey.getTable() ) ) ); // Child
+ oneToMany.setReferencedEntityName( revengStrategy.tableToClassName( foreignKeyTable ) ); // Child
mappings.addSecondPass( new JDBCCollectionSecondPass(mappings, collection) );
collection.setElement(oneToMany);
@@ -359,27 +379,35 @@
mutable = false;
}
- boolean isUnique = isUniqueReference(foreignKey);
- String propertyName = revengStrategy.foreignKeyToEntityName(
- foreignKey.getName(),
- TableIdentifier.create(foreignKey.getTable() ),
- foreignKey.getColumns(),
- TableIdentifier.create(foreignKey.getReferencedTable() ),
- foreignKey.getReferencedColumns(),
- isUnique
- );
-
- Property property = bindManyToOne(
- makeUnique(rc, propertyName),
- table,
- foreignKey,
- processedColumns
- );
- property.setUpdateable(mutable);
- property.setInsertable(mutable);
-
- rc.addProperty(property);
-
+ if(revengStrategy.excludeForeignKeyAsManytoOne(foreignKey.getName(),
+ TableIdentifier.create(foreignKey.getTable() ),
+ foreignKey.getColumns(),
+ TableIdentifier.create(foreignKey.getReferencedTable() ),
+ foreignKey.getReferencedColumns())) {
+ // TODO: if many-to-one is excluded should the column be marked as processed so it won't show up at all ?
+ log.debug("Rev.eng excluded many-to-one for foreignkey " + foreignKey.getName());
+ } else {
+ boolean isUnique = isUniqueReference(foreignKey);
+ String propertyName = revengStrategy.foreignKeyToEntityName(
+ foreignKey.getName(),
+ TableIdentifier.create(foreignKey.getTable() ),
+ foreignKey.getColumns(),
+ TableIdentifier.create(foreignKey.getReferencedTable() ),
+ foreignKey.getReferencedColumns(),
+ isUnique
+ );
+
+ Property property = bindManyToOne(
+ makeUnique(rc, propertyName),
+ table,
+ foreignKey,
+ processedColumns
+ );
+ property.setUpdateable(mutable);
+ property.setInsertable(mutable);
+
+ rc.addProperty(property);
+ }
}
}
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -182,5 +182,21 @@
public String tableToCompositeIdName(TableIdentifier identifier) {
return null;
}
+
+ public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ return false; // TODO: default to true ? TODO: named include ?
+ }
+
+ public boolean excludeForeignKeyAsManytoOne(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ return false;
+ }
+
+ public boolean isForeignKeyCollectionInverse(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ return true;
+ }
+
+ public boolean isForeignKeyCollectionLazy(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ return true;
+ }
}
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DelegatingReverseEngineeringStrategy.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -88,5 +88,22 @@
public String tableToCompositeIdName(TableIdentifier identifier) {
return delegate==null?null:delegate.tableToCompositeIdName(identifier);
+ }
+
+ public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ return delegate==null?false:delegate.excludeForeignKeyAsCollection(keyname, fromTable, fromColumns, referencedTable, referencedColumns);
+ }
+
+ public boolean excludeForeignKeyAsManytoOne(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ return delegate==null?false:delegate.excludeForeignKeyAsManytoOne(keyname, fromTable, fromColumns, referencedTable, referencedColumns);
+ }
+
+ public boolean isForeignKeyCollectionInverse(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ return delegate==null?true:delegate.isForeignKeyCollectionInverse(name, foreignKeyTable, columns, foreignKeyReferencedTable, referencedColumns);
+ }
+
+ public boolean isForeignKeyCollectionLazy(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ return delegate==null?true:delegate.isForeignKeyCollectionLazy(name, foreignKeyTable, columns, foreignKeyReferencedTable, referencedColumns);
}
+
}
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideBinder.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -151,23 +151,33 @@
if(StringHelper.isNotEmpty(constraintName)) {
String manyToOneProperty = null;
+ Boolean excludeManyToOne = null;
+
Element manyToOne = element.element("many-to-one");
if(manyToOne!=null) {
manyToOneProperty = manyToOne.attributeValue("property");
+ excludeManyToOne = BooleanValue(manyToOne.attributeValue("exclude"));
}
String collectionProperty = null;
+ Boolean excludeCollection = null;
Element collection = element.element("set");
if(collection!=null) {
collectionProperty = collection.attributeValue("property");
+ excludeCollection = BooleanValue(collection.attributeValue("exclude"));
}
- repository.addForeignKeyInfo(constraintName, manyToOneProperty, collectionProperty);
+ repository.addForeignKeyInfo(constraintName, manyToOneProperty, excludeManyToOne, collectionProperty, excludeCollection);
}
}
}
+ private static Boolean BooleanValue(String string) {
+ if(string==null) return null;
+ return Boolean.valueOf(string);
+ }
+
private static String getValue(String first, String second) {
if(first==null) {
return second;
@@ -198,7 +208,7 @@
repository.setTypeNameForColumn(tableIdentifier, column.getName(), element.attributeValue("type"));
repository.setPropertyNameForColumn(tableIdentifier, column.getName(), element.attributeValue("property"));
- boolean excluded = Boolean.valueOf(element.attributeValue("exclude")).booleanValue();
+ boolean excluded = booleanValue( element.attributeValue("exclude") );
if(excluded) {
repository.setExcludedColumn(tableIdentifier, column.getName());
}
@@ -233,6 +243,10 @@
return columnNames;
}
+ private static boolean booleanValue(String value) {
+ return Boolean.valueOf(value).booleanValue();
+ }
+
private static void bindTableFilters(List filters, OverrideRepository respository) {
Iterator iterator = filters.iterator();
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/OverrideRepository.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -63,6 +63,10 @@
final private Map foreignKeyToEntityName;
final private Map foreignKeyToCollectionName;
+
+ final private Map foreignKeyCollectionExclude;
+
+ final private Map foreignKeyManyToOneExclude;
//private String defaultCatalog;
//private String defaultSchema;
@@ -88,6 +92,8 @@
compositeIdNameForTable = new HashMap();
foreignKeyToEntityName = new HashMap();
foreignKeyToCollectionName = new HashMap();
+ foreignKeyCollectionExclude = new HashMap();
+ foreignKeyManyToOneExclude = new HashMap();
}
public OverrideRepository addFile(File xmlFile) {
@@ -397,6 +403,26 @@
return property;
}
}
+
+ public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ Boolean bool = (Boolean) foreignKeyCollectionExclude.get(keyname);
+ if(bool!=null) {
+ return bool.booleanValue();
+ } else {
+ return super.excludeForeignKeyAsCollection( keyname, fromTable, fromColumns,
+ referencedTable, referencedColumns );
+ }
+ }
+
+ public boolean excludeForeignKeyAsManytoOne(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ Boolean bool = (Boolean) foreignKeyManyToOneExclude.get(keyname);
+ if(bool!=null) {
+ return bool.booleanValue();
+ } else {
+ return super.excludeForeignKeyAsManytoOne( keyname, fromTable, fromColumns,
+ referencedTable, referencedColumns );
+ }
+ }
};
}
@@ -483,13 +509,19 @@
schemaSelections.add(schemaSelection);
}
- public void addForeignKeyInfo(String constraintName, String manyToOneProperty, String collectionProperty) {
+ public void addForeignKeyInfo(String constraintName, String manyToOneProperty, Boolean excludeManyToOne, String collectionProperty, Boolean excludeCollection) {
if(StringHelper.isNotEmpty(manyToOneProperty)) {
foreignKeyToEntityName.put(constraintName, manyToOneProperty);
}
if(StringHelper.isNotEmpty(collectionProperty)) {
foreignKeyToCollectionName.put(constraintName, collectionProperty);
}
+ if(excludeCollection!=null) {
+ foreignKeyCollectionExclude.put(constraintName, excludeCollection);
+ }
+ if(excludeManyToOne!=null) {
+ foreignKeyManyToOneExclude.put(constraintName, excludeManyToOne);
+ }
}
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/ReverseEngineeringStrategy.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -21,6 +21,18 @@
*/
public String columnToPropertyName(TableIdentifier table, String column);
+ /** Should this foreignkey be used as a oneToMany */
+ public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns);
+
+ /** Should this foreignkey be used as a many-to-one */
+ public boolean excludeForeignKeyAsManytoOne(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns);
+
+ /** is the collection inverse or not ? */
+ public boolean isForeignKeyCollectionInverse(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns);
+
+ /** is the collection lazy or not ? */
+ public boolean isForeignKeyCollectionLazy(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns);
+
/**
* Return a collection role name for a Collection based on the foreignkey.
* @param fromColumns list of Column instances on the fromTable. Only col.getName() should be assumed to be correct
@@ -114,5 +126,9 @@
public String tableToCompositeIdName(TableIdentifier identifier);
+
+
+
+
}
Modified: trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd
===================================================================
--- trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/java/org/hibernate/hibernate-reverse-engineering-3.0.dtd 2006-04-07 12:24:37 UTC (rev 9737)
@@ -83,21 +83,25 @@
<!ELEMENT param (#PCDATA)>
<!ATTLIST param name CDATA #REQUIRED>
-<!ELEMENT foreign-key (column-ref+,many-to-one?,(set)?) >
+<!-- A foreign-key has to have at least a constraint-name AND/OR foreign-table+column-ref's -->
+<!ELEMENT foreign-key (column-ref*,many-to-one?,(set)?) >
<!ATTLIST foreign-key constraint-name CDATA #IMPLIED >
<!ATTLIST foreign-key foreign-catalog CDATA #IMPLIED >
<!ATTLIST foreign-key foreign-schema CDATA #IMPLIED >
-<!ATTLIST foreign-key foreign-table CDATA #REQUIRED >
+<!ATTLIST foreign-key foreign-table CDATA #IMPLIED >
<!ELEMENT column-ref EMPTY >
<!ATTLIST column-ref local-column CDATA #REQUIRED >
<!ATTLIST column-ref foreign-column CDATA #IMPLIED >
<!ELEMENT many-to-one EMPTY >
-<!ATTLIST many-to-one property CDATA #REQUIRED>
+<!ATTLIST many-to-one property CDATA #IMPLIED>
+<!ATTLIST many-to-one exclude (true|false) #IMPLIED>
+
<!ELEMENT set EMPTY >
-<!ATTLIST set property CDATA #REQUIRED>
+<!ATTLIST set property CDATA #IMPLIED>
+<!ATTLIST set exclude (true|false) #IMPLIED>
<!-- <!ELEMENT bag EMPTY >
<!ATTLIST bag property CDATA #REQUIRED> -->
Modified: trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java
===================================================================
--- trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java 2006-04-07 08:13:46 UTC (rev 9736)
+++ trunk/HibernateExt/tools/src/testsupport/NoopReverseEngineeringStrategy.java 2006-04-07 12:24:37 UTC (rev 9737)
@@ -114,4 +114,24 @@
// TODO Auto-generated method stub
return null;
}
+
+ public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean excludeForeignKeyAsManytoOne(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean isForeignKeyCollectionInverse(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean isForeignKeyCollectionLazy(String name, TableIdentifier foreignKeyTable, List columns, TableIdentifier foreignKeyReferencedTable, List referencedColumns) {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
|